Условие XPath для печати блока xml - PullRequest
2 голосов
/ 15 октября 2008

Я использую 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?

EDIT

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

Вот куда уходит мое состояние XPath:

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

Ответы [ 3 ]

2 голосов
/ 15 октября 2008

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

1 голос
/ 21 октября 2008

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

1 голос
/ 15 октября 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...