<dependency>
<groupId>com.avides.xpath</groupId>
<artifactId>xpath-utils</artifactId>
<version>2.1.0</version>
</dependency>
XPathUtils.getRootElement(InputStream inputStream);
XPathUtils.getRootElement(Reader reader);
XPathUtils.getRootElement(File file);
XPathUtils.getRootElement(String xml);
XPathUtils.queryBool(Node root, String xPath);
XPathUtils.queryBoolean(Node root, String xPath);
XPathUtils.queryChar(Node root, String xPath);
XPathUtils.queryCharacter(Node root, String xPath);
XPathUtils.queryDouble(Node root, String xPath);
XPathUtils.queryElementList(Node root, String xPath);
XPathUtils.queryEnum(Node root, String xPath, Class<E> enumClass);
XPathUtils.queryFirst(Node root, String xPath);
XPathUtils.queryFirst(Node root, String xPath, Class<? extends Function<String, T>> converterClass);
XPathUtils.queryFirstElement(Node root, String xPath);
XPathUtils.queryFirstNode(Node root, String xPath);
XPathUtils.queryFloat(Node root, String xPath);
XPathUtils.queryInt(Node root, String xPath);
XPathUtils.queryInteger(Node root, String xPath);
XPathUtils.queryList(Node root, String xPath);
XPathUtils.queryList(Node root, String xPath, Class<? extends Function<String, T>> converterClass);
XPathUtils.queryList(Node root, String xPath, Class<? extends Function<String, T>> converterClass, Class<T> subType);
XPathUtils.queryTypedList(Node root, String xPath, Class<T> subType);
XPathUtils.queryLocalDate(Node root, String xPath);
XPathUtils.queryLocalDateTime(Node root, String xPath);
XPathUtils.queryLocalTime(Node root, String xPath);
XPathUtils.queryLong(Node root, String xPath);
XPathUtils.queryMap(Node root, String, String, String);
XPathUtils.queryMap(Node root, String entryXPath, String keySubXPath, String valueSubXPath, Class<? extends Function<String, K>> keyConverterClass, Class<? extends Function<String, V>> valueConverterClass);
XPathUtils.queryMap(Node root, String entryXPath, String keySubXPath, String valueSubXPath, Class<? extends Function<String, K>> keyConverterClass, Class<? extends Function<String, V>> valueConverterClass, Class<K> keySubType, Class<V> valueSubType)
XPathUtils.queryTypedMap(Node root, String entryXPath, String keySubXPath, String valueSubXPath, Class<K> keySubType, Class<V> valueSubType)
XPathUtils.queryKeyTypedMap(Node root, String entryXPath, String keySubXPath, String valueSubXPath, Class<K> keySubType, Class<? extends Function<String, V>> valueConverterClass)
XPathUtils.queryKeyTypedMap(Node root, String entryXPath, String keySubXPath, String valueSubXPath, Class<K> keySubType)
XPathUtils.queryValueTypedMap(Node root, String entryXPath, String keySubXPath, String valueSubXPath, Class<? extends Function<String, K>> keyConverterClass, Class<V> valueSubType)
XPathUtils.queryValueTypedMap(Node root, String entryXPath, String keySubXPath, String valueSubXPath, Class<V> valueSubType)
XPathUtils.queryNodeList(Node root, String xPath);
XPathUtils.queryNodeMap(Node root, String entryXPath, String keySubXPath, String valueSubXPath)
XPathUtils.queryNodes(Node root, String xPath);
XPathUtils.queryPrimitiveBoolean(Node root, String xPath);
XPathUtils.queryPrimitiveCharacter(Node root, String xPath);
XPathUtils.queryPrimitiveDouble(Node root, String xPath);
XPathUtils.queryPrimitiveFloat(Node root, String xPath);
XPathUtils.queryPrimitiveInteger(Node root, String xPath);
XPathUtils.queryPrimitiveLong(Node root, String xPath);
XPathUtils.queryPrimitiveShort(Node root, String xPath);
XPathUtils.queryShort(Node root, String xPath);
XPathUtils.queryZonedDateTime(Node root, String xPath);
XPathUtils.hasNode(Node root, String xPath);
XPathUtils.hasNodes(Nodes nodes);
XPathUtils.each(Node root, String xPath);
// marshalling-methods:
XPathUtils.fromRoot(Element root, Class<T> type);
XPathUtils.fromInputStream(InputStream inputStream, Class<T> type);
XPathUtils.fromReader(Reader reader, Class<T> type);
XPathUtils.fromFile(File file, Class<T> type);
XPathUtils.fromXml(String xml, Class<T> type);
XPathUtils.registerConverterInstance(Function<String, T> converter);
XPathUtils.unregisterConverterInstance(Class<? extends Function<String, ?>> converterClass)
XPathUtils.clearConverterInstances()
XPathUtils.registerDefaultConverterInstanceToType(Class<?> type, Function<String, ?> converter)
XPathUtils.unregisterDefaultConverterInstanceToType(Class<?> type)
XPathUtils.resetDefaultConverterInstancesToType()
<xml>
<anyStringValue>anyValue</anyStringValue>
<anyIntegerValue>123</anyIntegerValue>
<stringList>
<value>listValue1</value>
<value>listValue2</value>
<value>listValue3</value>
</stringList>
<integerList>
<value>10</value>
<value>11</value>
<value>12</value>
</integerList>
<stringMap>
<entry>
<string>key1</string>
<string>value1</string>
</entry>
<entry>
<string>key2</string>
<string>value2</string>
</entry>
</stringMap>
<integerMap>
<entry>
<string>key1</string>
<string>100</string>
</entry>
<entry>
<string>key2</string>
<string>200</string>
</entry>
</integerMap>
</xml>
Element root = XPathUtils.getRootElementFromXml(xml);
String stringValue = XPathUtils.queryFirst(root, "anyStringValue");
Integer integerValue = XPathUtils.queryFirst(root, "anyIntegerValue", ToIntegerConverter.class);
List<String> stringList = XPathUtils.queryList(root, "stringList/value");
List<Integer> integerList = XPathUtils.queryList(root, "integerList/value");
Map<String, String> stringMap = XPathUtils.queryMap(root, "stringMap/entry", "string[1]", "string[2]");
Map<String, Integer> integerMap = XPathUtils.queryMap(root, "integerMap/entry", "string[1]", "string[2]", NoneConverter.class, ToIntegerConverter.class);
// should output 'anyValue - 123':
System.out.println(stringValue + " - " + integerValue);
// should output '[value1, value2, value3]':
System.out.println(stringList);
// should output '[10, 11, 12]':
System.out.println(integerList);
// should output '{key1=value1, key2=value2}':
System.out.println(stringMap);
// should output '{key1=100, key2=200}':
System.out.println(integerMap);
class AnyObject
{
@XPathFirst("anyStringValue")
String stringValue;
// All known default-converters are already registered for conversion
// to default-field-types, so the converterClass could be left here,
// but is set for illustration:
@XPathFirst(value = "anyIntegerValue", converterClass = ToIntegerConverter.class)
Integer integerValue;
@XPathList("stringList/value")
List<String> stringList;
@XPathList(value = "integerList/value", converterClass = ToIntegerConverter.class)
List<Integer> integerList;
@XPathMap(entryXPath = "stringMap/entry", keySubXPath = "string[1]", valueSubXPath = "string[2]")
Map<String, String> stringMap;
@XPathMap(entryXPath = "integerMap/entry", keySubXPath = "string[1]", valueSubXPath = "string[2]", valueConverterClass = ToIntegerConverter.class)
Map<String, Integer> integerMap;
}
AnyObject anyObject = XPathUtils.fromXml(xml, AnyObject.class);
// should output 'anyValue - 123':
System.out.println(anyObject.stringValue + " - " + anyObject.integerValue);
// should output '[value1, value2, value3]':
System.out.println(anyObject.stringList);
// should output '[10, 11, 12]':
System.out.println(anyObject.integerList);
// should output '{key1=value1, key2=value2}':
System.out.println(anyObject.stringMap);
// should output '{key1=100, key2=200}':
System.out.println(anyObject.integerMap);
ToLocalDateConverter converter = new ToLocalDateConverter(DateTimeFormatter.ofPattern("dd.MM.yyyy"));
XPathUtils.registerConverterInstance(converter);
ToLocalDateConverter converter = new ToLocalDateConverter(DateTimeFormatter.ofPattern("dd.MM.yyyy"));
XPathUrils.registerDefaultConverterInstanceToType(LocalDate.class, converter);