我正在使用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()";
答案 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级别进行此转换(通过打印内部文本)。