2013-12-04 5 views
0

Я использую этот код, но я не уверен, как должно выглядеть выражение XPath.Как получить каждый потомок узла с помощью XPath в java?

XPath xpath = XPathFactory.newInstance().newXPath(); 
XPathExpression expression = xpath.compile("XXXX"); 
NodeList nodes = (NodeList) expression.evaluate(doc.getDocumentElement(), XPathConstants.NODESET); 

Скажем, есть дерево:

<animal> 
    <big> 
     <elephant> 
      <white_elephant> 

      </white_elephant> 
     </elephant> 
    </big> 
    <small> 
    </small> 
</animal> 

Я хотел бы получить каждый потомок узла большой: (слон, white_elephant) + большой сам

+1

Что вы уже пробовали? – forgivenson

+1

Я пробовал сочетание отдельных дисков, которые я нашел в Интернете, но это не сработало. Честно говоря, прямо сейчас у меня нет времени изучать XPath, вот почему я спросил здесь. – Patryk

+0

Вы пробовали что-то вроде «/ animal/big |/animal/big/*» – MadProgrammer

ответ

3

Вы могут использовать descendant-or-self-окс:

XPath xpath = XPathFactory.newInstance().newXPath(); 
XPathExpression expression = xpath.compile("//big/descendant-or-self::*"); 
NodeList nodes = (NodeList) expression.evaluate(doc.getDocumentElement(), XPathConstants.NODESET); 

Википедии является хорошим источником, чтобы получить обзор по другой оси: http://en.wikipedia.org/wiki/XPath#Axis_specifiers

Edit: Как Jens Erat упоминает в комментариях, вы можете сократить /descendant-or-self:: к // - это всего лишь аббревиатура:

XPathExpression expression = xpath.compile("//big//*"); 
+1

Существует аббревиатура для этой оси, вы также можете использовать '// big // *'. –

+0

Спасибо, ты прав! Я думал, что // будет аббревиатурой только для потомков. Я отредактирую свой ответ. – stuXnet

Смежные вопросы