#java #xpath
#java #xpath
Вопрос:
я новичок в XNode и хочу выбрать все узлы типа под данным узлом. В следующем примере я ищу все узлы bar под узлом foo.
<node>
<foo>
<bar/>
<div><bar/></div>
<ul>
<li><bar/>
</ul>
<p>foobar</p>
</foo>
<bar/>
</node>
Мое приложение получает узел foo (org.w3c.dom.Node):
NodeList nodeList = (NodeList) xpath.evaluate("//bar", fooNode, XPathConstants.NODESET);
Возвращает все узлы строки всего документа, а не из fooNode, даже если я передал узел, а не весь документ.
Комментарии:
1. Как инициализируется fooNode?
2. Извините, я не знаю, что вы имеете в виду под инициализированным? Узел — это узел <foo>, выбранный с помощью XPath
3. xpath.evaluate(«//bar», fooNode, …) в этой строке, чему равен fooNode? И инициализированный просто означает установку переменной на некоторое значение в первый раз
Ответ №1:
Возвращает все узлы строки всего документа, а не из fooNode, даже если я передал узел, а не весь документ.
Это ожидаемое поведение для абсолютного пути к местоположению as //bar
. Используйте относительный путь к местоположению как .//bar
или descendant-or-self::bar
или descendant::bar
Ответ №2:
Я не уверен, что это то, что вы ищете, но
//foo/descendant-or-self::bar
выбирает 3 </bar>
s внутри <foo>
.