XSL如何计算节点的深度

时间:2015-05-04 17:58:53

标签: xml xslt

我希望计算当前节点的深度。下面是xml代码和我想要的输出

的示例
<boxes>  
    <box name="box A">  
        <box name="box B">  
        </box>  
    </box>  
    <box name="box C">  
        <box name="box D">  
            <box name="box E">  
                <box name="box F">  
                </box>  
            </box>  
        </box>  
    </box>  
</boxes>  

XSL看起来像这样

<xsl:for-each select="box">  
    <xsl:value-of select="DEPTH"/><xsl:value-of select="@name"/>  
    <xsl:for-each select="box">
        <xsl:value-of select="DEPTH"/><xsl:value-of select="@name"/>  
        <xsl:for-each select="box">  
            <xsl:value-of select="DEPTH"/><xsl:value-of select="@name"/>  
            <xsl:for-each select="box">
                <xsl:value-of select="DEPTH"/><xsl:value-of select="@name"/>  
                <xsl:for-each select="box">  
                    <xsl:value-of select="DEPTH"/><xsl:value-of select="@name"/>  
                </xsl:for-each>  
            </xsl:for-each>  
        </xsl:for-each>  
    </xsl:for-each>  
</xsl:for-each>  

输出看起来像这样 1盒A
2箱B
1箱C
2箱D
3箱E
4盒F

1 个答案:

答案 0 :(得分:0)

  

我希望计算当前节点的深度。

尝试:

count(ancestor-or-self::*)

(假设&#34;节点&#34;表示&#34;元素&#34;在此上下文中。)

例如,以下样式表:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>

<xsl:template match="box">
    <xsl:value-of select="count(ancestor-or-self::*)"/>
    <xsl:text>&#9;</xsl:text>
    <xsl:value-of select="@name"/>
    <xsl:text>&#10;</xsl:text>
    <xsl:apply-templates/>
</xsl:template>

</xsl:stylesheet>

应用于您的示例输入时,将返回:

2   box A
3   box B
2   box C
3   box D
4   box E
5   box F