使用xsl解析任意深度xml

时间:2013-11-04 10:18:09

标签: xml xslt xml-parsing

我正在尝试使用XSL文件解析XML文件。

我的问题是,我的XML文件可以保存任意深度的路径f.x。

<document>
    <branch>
        <data>somedata</data>
        <children>
            <branch>
                <data>somedata</data>
                <children>
                    ....
                </children>
            </branch>
         </children>
     </branch>
</document>

我不知道这些节点的深度,但我知道它们是如何命名的。如何提取每个节点f.x的内容。?

我想保留节点的层次结构。

感谢。

我找到了解决方案。不知道这是不是Martin og HashCoder的意思:

<xsl:template match="branch">
    <p><xsl:value-of select="branchcontent.list/branchtext/properties.list/p/@v"/></p>
        <xsl:apply-templates select="subbranches.list"/>
</xsl:template>

2 个答案:

答案 0 :(得分:0)

您的问题对我来说不是很清楚..您是否尝试复制所有节点值?

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output indent="yes"/>
        <xsl:strip-space elements="*"/>
    <xsl:template match="@* | node()">
      <xsl:copy>
        <xsl:apply-templates select="@* , node()"/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

如果要展平层次结构,请使用

<xsl:template match="/">
  <xsl:apply-templates select="//data"/>
</xsl:template>

<xsl:template match="data">
  <xsl:value-of select="."/>
</xsl:template>

如果要遍历并保留层次结构,请使用

<xsl:template match="branch">
  <div>
   <xsl:apply-templates/>
  </div>
</xsl:template>

    <xsl:template match="data">
      <xsl:value-of select="."/>
    </xsl:template>