用于打印xml块的XPath条件

时间:2008-10-15 06:59:41

标签: xml xpath

我正在使用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()";

3 个答案:

答案 0 :(得分:2)

如果您使用/ animals / dog,您将返回包含所有子节点的'dog'节点。打印该节点的内部xml应该可以满足您的需求。

答案 1 :(得分:1)

使用命令行工具xpath演示rslite的方法(用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>

答案 2 :(得分:1)

所有XPath都会选择一个节点。 // text()测试只选择文档中的所有文本节点。文档中的元素仅作为元素节点存在,而不是您似乎暗示的文本块。如果要将这些元素转换为文本,则需要在Java级别进行此转换(通过打印内部文本)。