У меня есть XML следующим образом,оценка XPATH против дочернего узла
<students>
<Student><age>23</age><id>2000</id><name>PP2000</name></Student>
<Student><age>23</age><id>1000</id><name>PP1000</name></Student>
</students>
У меня есть 2 XPaths шаблона XPATH = students/Student
будут узлы шаблона, но я не могу жесткий код этого XPath, так как она будет меняться для других XMLs и XML является довольно динамичным, можно расширить (но с тем же базовым XPaths) Так что, если я оцениваю еще один XPATH, используя узел шаблона, я использую следующий код,
XPath xpathResource = XPathFactory.newInstance().newXPath();
Document xmlDocument = //creating document;
NodeList nodeList = (NodeList)xpathResource.compile("//students/Student").evaluate(xmlDocument, XPathConstants.NODESET);
for (int nodeIndex = 0; nodeIndex < nodeList.getLength(); nodeIndex++) {
Node currentNode = nodeList.item(nodeIndex);
String xpathID = "//students/Student/id";
String xpathName = "//students/Student/name";
NodeList childID = (NodeList)xpathResource.compile(xpathID).evaluate(currentNode, XPathConstants.NODESET);
NodeList childName = (NodeList)xpathResource.compile(xpathName).evaluate(currentNode, XPathConstants.NODESET);
System.out.println("node ID " +childID.item(0).getTextContent());
System.out.println("node Name " +childName.item(0).getTextContent());
}
Теперь проблема, это для цикла будет выполняться в 2 раза, но оба раза я получаю 2000 , PP2000
как значение идентификатора. Есть ли способ перебора дочернего узла с общим XPATH на узел. Я не могу использовать общий XPATH для всего XMLDocument, у меня есть какая-то проверка. Я хочу использовать XML-ноделист как строки набора результатов, чтобы я мог проверить значение XML и делать свои вещи.
Изменить этот System.out.println ("node" + child.item (0) .getTextContent()); to System.out.println ("node" + child.item (nodeIndex) .getTextContent()); – pringi
Также нет необходимости перебирать первый NodeList. Просто удалите цикл for и оставьте последние две строки в цикле for. Затем итерации дочернего узла NodeList, чтобы получить все studentIds. – pringi
@pringi Я не могу пойти с nodeIndex, если у второго 'Student' нет узла' name', я могу получить исключение индекса. –