我可以在xsl中存储值的总和吗?

时间:2009-06-09 15:52:47

标签: xslt

假设我有一个Xml片段,我正在使用XSL:

<Columns>
   <Column width="100">
   <Column width="50">
   <Column width="75">
   <Column width="33">
</Columns>

基本上我想要做的是,当我遍历每个节点时,我需要存储以前用于当前Column节点的'width'属性的总和。例如,当我到达最后一个Column节点(宽度为33)时,我希望能够访问某种变量(100 + 50 + 75)中所有先前宽度的总和。我知道一旦在XSL中设置变量值就无法改变,所以我想知道是否有某种方法使用模板参数或其他东西来做到这一点。提前谢谢!

1 个答案:

答案 0 :(得分:1)

基本上,您利用模板递归并限制仅传递给下一个兄弟的集合。从第一个项目开始,您可以不断地将更新的值传递给下一个模板调用。

<xsl:template match="/">
    <xsl:apply-templates select="Columns/Column[1]" />
</xsl:template>

<xsl:template match="Column">
    <xsl:param name="runningtotal" select="0"/>
    [<xsl:value-of select="@width"/>:<xsl:value-of select="$runningtotal+@width"/>]
    <xsl:apply-templates select="following-sibling::Column[1]" >
        <xsl:with-param name="runningtotal" select="$runningtotal+@width"/>
    </xsl:apply-templates>
</xsl:template>