Выберите все узлы типа под заданным узлом

#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> .