Условие XPath для печати блока xml

Я использую Java API и XPath для анализа моего XML. У меня есть такой XML:

<animals>
  <dog>
    <looks>dangerous </looks> 
     <bites> hard </bites>
     <growls> yes </growls>
  </dog>
  <cat>nothing special</cat>
</animals>

Я хотел бы, чтобы условие XPath печаталось

<dog>
  <looks>dangerous </looks> 
  <bites> hard </bites>
  <growls> yes </growls>
</dog>

Но я не в состоянии сейчас. Если я использую /animal/dog/text(), это дает dangerous. Но я предполагаю, что он используется только для печати текста. Есть ли способ использовать условие XPath для получения блока XML?

ИЗМЕНИТЬ:

Большое спасибо за ваши ответы. Цените потраченное на это время. Есть ли способ сделать это на Java без печати внутреннего текста?

Вот куда идет мое условие XPath:

public static final String XPATH_INPUT_DATA="//text()";

person user25458    schedule 15.10.2008    source источник


Ответы (3)


Если вы используете /animals/dog, вы получите узел «собака» со всеми дочерними узлами. Печать внутреннего xml этого узла должна дать вам то, что вам нужно.

person rslite    schedule 15.10.2008

Демонстрация метода rslite с помощью инструмента командной строки xpath (написано на Perl, но это стандартный Xpath, он должен работать везде):

% xpath -e /animals/dog animals.xml 
Found 1 nodes in animals.xml:
-- NODE --
<dog>
   <looks>dangerous </looks> 
   <bites> hard </bites>
   <growls> yes </growls>
</dog>
person bortzmeyer    schedule 15.10.2008
comment
Есть ли способ сделать это в java без печати внутреннего текста? - person user25458; 16.10.2008

Все, что делает XPath, — это выбирает узел. Тест //text() просто выбирает все текстовые узлы внутри документа. Элементы существуют в документе только как узлы элементов, а не как блоки текста, как вы, кажется, подразумеваете. Если вы хотите преобразовать эти элементы в текст, вам нужно сделать это преобразование на уровне Java (путем печати внутреннего текста).

person Oliver Hallam    schedule 21.10.2008