xpath获取整个xml树结构

时间:2012-01-13 00:15:10

标签: xml xpath vtd-xml

是否有办法使用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();

4 个答案:

答案 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()