Итак, у меня есть этот xml:
<employees>
<employee>
<name>John</name>
<surname>Smith</surname>
<age>18</age>
</employee>
<employee>
<name>Test</name>
<surname>1</surname>
<age>18</age>
</employee>
<employee>
<name>Cat</name>
<surname>Dog</surname>
<age>18</age>
</employee>
<employee>
<name>John</name>
<surname>Bravo</surname>
<age>19</age>
</employee>
</employees>
Я использую Xpath для получения дочернего узла:
File f = new File("employees.xml");
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document doc = builder.parse(f);
XPath xPath = XPathFactory.newInstance().newXPath();
String val = "John";
String expression = "./employees[employee/name='"+ val +"']";
Node locatedNode = (Node) xPath.evaluate(expression, doc, XPathConstants.NODE);
Nodelist result = locatedNode.getParentNode().getChildNodes();
После этого я использую цикл for, чтобы просмотреть список узлов и получить фамилии сотрудников. В этом случае я получу фамилии двух Джона и добавлю их в список массивов.
List<Surname> sname = new ArrayList<Surname>;
for (int i = 0; i < result.getLength(); i++) {
Node nNode = result.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
String surname = eElement.getElementsByTagName("surname").item(0).getTextContent();
sname.add(new Surname(surname));
}
}
Проблема в том, что я не мог получить узел, он продолжал выдавать ошибку nullpointexception. Это мое выражение неправильное или эта строка:
Nodelist result = locatedNode.getParentNode().getChildNodes();
неправильно?
Что я хотел получить (фамилия и возраст) на основе фамилии (Джон): Смит 18 Браво 19
Фамилии обоих сотрудников Джона