【问题标题】:xpath to get the entire xml tree structurexpath获取整个xml树结构
【发布时间】:2012-01-13 00:15:09
【问题描述】:

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

【问题讨论】:

  • 嗨,约翰,这似乎不起作用。
  • 您到底希望它做什么?你能显示一些代码吗?
  • 我正在使用 VTD XML 和 Java 来获取 xpath。我已经能够使用 AutoPilot ap = new AutoPilot(); 获得正常的 xpath。 ap.selectXPath() ;字符串元素 = ap.evalXPathToString() ;
  • 花时间阅读How to Ask。您能否展示您正在使用的代码,并展示结果是什么,并展示为什么结果不是您所期望的。
  • 很抱歉。这是我在 stackoverflow 上的第一篇文章。我已经用代码编辑了主帖。

标签: xml xpath vtd-xml


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用

    /*/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>
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      【解决方案4】:

      使用

      /descendant-or-self::node()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-29
        • 1970-01-01
        • 2015-11-22
        • 2014-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-09
        相关资源
        最近更新 更多