XSLT 2.0 for-each计数

时间:2014-05-18 16:13:55

标签: xslt-2.0 xsl-fo

我必须对xml项进行迭代,并在每一行进行一些数学计算

<items>
<item amount="12">
<item amount="13">
<item amount="14">
</items>

我已经尝试将此分配给全局变量或创建一个函数。两者都不适合我。

所以现在我想在每一行之后计算金额的总和。我怎么能用xslt-2.0做到这一点。分配给全局变量不起作用。

1 个答案:

答案 0 :(得分:0)

  

我想在每一行之后计算金额的总和

如果要打印所有先前金额的累积金额,可以在每个item的上下文中使用XPath表达式,例如:

sum(preceding-sibling::item/@amount | @amount)

此样式表:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:template match="items">
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="item">
        <xsl:copy-of select="."/>
        <subtotal>
            <xsl:value-of select="sum(preceding-sibling::item/@amount | @amount)"/>
        </subtotal>
    </xsl:template>
</xsl:stylesheet>

应用于您的示例案例将产生:

<items>
    <item amount="12"/><subtotal>12</subtotal>
    <item amount="13"/><subtotal>25</subtotal>
    <item amount="14"/><subtotal>39</subtotal>
</items>