xerces Xpath - поиск узла с другого узла
У меня есть следующий XML:
<ONIXMessage>
<Product>
<RecordReference>9786071502131</RecordReference>
<RecordReference>9786071502131</RecordReference>
</Product>
<Product>
<RecordReference>9786071502131</RecordReference>
</Product>
</ONIXMessage>
И следующий код Java:
Element ONIXmessage = document.getDocumentElement();
products = XPathAPI.selectNodeList(ONIXmessage, "/ONIXMessage/Product");
for(int i = 0;i < products.getLength();i++) {
Node product = products.item(i);
NodeList prova = XPathAPI.selectNodeList(ONIXmessage, "/ONIXMessage/Product/RecordReference");
System.out.println(prova.getLength());
NodeList prova2 = XPathAPI.selectNodeList(product, "/ONIXMessage/Product/RecordReference");
System.out.println(prova2.getLength());
}
Этот код возвращает: 3 3 3 3
Я думаю, что этот код должен возвращать 3 2 3 1, потому что переменная prova содержит все узлы RecordReference документа, а prova2 содержит только конкретные узлы RecordReference только одного узла продукта.
Как я могу использовать XPATH, чтобы получить только узлы определенного продукта?
1 ответ
Первый параметр для XPathAPI#selectNodeList
является контекстом для выражения XPath.
Проходя product
переменная является разумной и правильной, но ваш запрос XPath неверен: косая черта /
в начале выражения обозначает корневой узел текущего контекста, который в данном случае является <ONIXMessage/>
элемент.
Вместо этого начните с текущего контекста, который представлен точкой .
, Помните, что ваше новое выражение начинается в этом контексте, поэтому ваш новый XPath будет ./RecordReference
, Вы могли бы даже опустить ./
, но я предпочитаю добавлять эти два символа, облегчая чтение и понимание запроса:
NodeList prova2 = XPathAPI.selectNodeList(product, "./RecordReference");