4

有没有办法使用 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

4 回答 4

4

请记住,XPath 选择一个节点或一组节点。将其视为将指针返回到原始源代码树。它不返回“整个树结构”,它返回指向该结构中选定节点的指针。无论您选择什么,通过从选定节点导航到其他节点,您的程序都可以使用整个结构。导航可以使用进一步的 XPath 表达式,或使用类似 DOM 的导航 API,或通过序列化等操作隐式完成(通常当您序列化一个节点时,它会显示以该节点为根的整个子树)。

于 2012-01-13T07:47:45.013 回答
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>
于 2012-01-13T04:03:00.150 回答
2

理想情况下,“//b”从当前节点中选择文档中与选择匹配的节点。

于 2012-01-13T00:46:19.937 回答
1

利用

/descendant-or-self::node()
于 2013-11-29T06:58:20.740 回答