是否有办法使用xpath获取整个树结构。例如,假设这是xml
<a>
<b>
<c>
data
</c>
</b>
</a>
我希望xpath获取节点的所有内容,结果应该是
<b>
<c>
data
</c>
</b>
到目前为止,我一直在使用VTD-XML和java来检索元素。这是我一直在使用的代码。
VTDGen vg = new VTDGen();
vg.setDoc(xmlString);
vg.parse(true);
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath(xPath);
String data = ap.evalXPathToString();
答案 0 :(得分:3)
使用强>:
/*/node()
这将选择XML文档顶部元素的所有子节点。所有这些节点的集合都具有所需的子树结构,因为每个选定的元素都保留其整个子树(其中该元素是顶级节点)。
基于XSLT的验证:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select="/*/node()"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于提供的XML文档:
<a>
<b>
<c>
data
</c>
</b>
</a>
评估XPath表达式并输出所选节点,产生所需的正确结果:
<b>
<c>
data
</c>
</b>
答案 1 :(得分:3)
请记住,XPath选择一个节点或一组节点。将其视为返回指向原始源树的指针。它没有返回整个树结构&#34;,它返回指向该结构中所选节点的指针。无论您选择什么,通过从所选节点导航到其他节点,您的程序都可以使用整个结构。该导航可以使用更多XPath表达式,或使用类似DOM的导航API,或通过序列化等操作隐式执行(通常在序列化节点时,它显示以该节点为根的整个子树)。
答案 2 :(得分:2)
理想情况下,“// b”从当前节点中选择与选择匹配的节点中的节点。
答案 3 :(得分:1)
使用
/descendant-or-self::node()