Рабочий XPath на дочернем узле

Я пытаюсь сделать xpath поиск на узлах, возвращенных xpath поиском, но это, кажется, не работает, как я ожидал. XPaths, выполняемые на дочерних узлах документа, кажется, executd против hthe корневого узла документа (в примере, теге материально-технических ресурсов.), вместо корня обеспеченного узла.

Я пропускаю что-то здесь? Я плохо знаком с XPath.

Кроме того, не отвечайте, "просто делают//книга [автор =' Neal Stephenson '/title". У меня есть законный вариант использования, и это - упрощенный пример.

Фрагмент кода

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("src/main/java/books.xml");

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();

Node book = (Node) xpath.evaluate("//book[author='Neal Stephenson']", doc, XPathConstants.NODE);
Node title = (Node) xpath.evaluate("/title", book, XPathConstants.NODE); // I get null here.
Node inventory = (Node) xpath.evaluate("/inventory", book, XPathConstants.NODE); // this returns a node.

book.xml

<inventory>
<book year="2000">
    <title>Snow Crash</title>
    <author>Neal Stephenson</author>
    <publisher>Spectra</publisher>
    <isbn>0553380958</isbn>
    <price>14.95</price>
</book>

<book year="2005">
    <title>Burning Tower</title>
    <author>Larry Niven</author>
    <author>Jerry Pournelle</author>
    <publisher>Pocket</publisher>
    <isbn>0743416910</isbn>
    <price>5.99</price>
</book>

<book year="1995">
    <title>Zodiac</title>
    <author>Neal Stephenson</author>
    <publisher>Spectra</publisher>
    <isbn>0553573862</isbn>
    <price>7.50</price>
</book>

<!-- more books... -->

</inventory>
49
задан Jeeyoung Kim 11 April 2010 в 07:15
поделиться

2 ответа

/ foo будет выбирать на основе корневого узла, игнорируя контекст, который вы оцениваете xpath против. foo (без косой черты) - это то, что вам нужно; который выбирает на основе текущего узла.

https://www.w3schools.com/xml/xpath_syntax.asp дает немного больше информации.

49
ответ дан 7 November 2019 в 11:44
поделиться

Просто уберите косую черту в своих подзапросах, и все будет в порядке. Итак, вы получаете свои книги через «// book» , а затем оттуда просто «title» , «inventory» и т. Д., Чтобы получить дочерние биты.

7
ответ дан 7 November 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: