XSL如何在不同节点中对元素求和

时间:2014-10-22 22:40:47

标签: xml xslt

我需要对来自不同节点的元素求和。我试着编写不同的代码变体,但看起来,我会遗漏一些重要的东西。这是我简化的XML文件:

<documents>
    <document>
        <rows>
            <row>
                <name>apple</name>
                <amount>10</amount>
            </row>
            <row>
                <name>carrot</name>
                <amount>10</amount>
            </row>
        </rows>
        <client_name>customer_x</client_name>
    </document>
    <document>
        <rows>
            <row>
                <name>banana</name>
                <amount>20</amount>
            </row>
        </rows>
        <client_name>customer_x</client_name>
    </document>
    <document>
        <rows>
            <row>
                <name>banana</name>
                <amount>50</amount>
            </row>
        </rows>
        <client_name>customer y</client_name>
    </document>
</documents>

这是我目前的代码:

<xsl:for-each select="/documents/document">
    <xsl:if test="contains(client_name, 'customer_x')"> 
        <xsl:value-of select="sum(rows/*/amount)"/>
    </xsl:if>
</xsl:for-each>

输出是: 20 20

但我需要输出,其中所有这些金额值一起求和,最终结果在这种情况下为40

1 个答案:

答案 0 :(得分:2)

让XPath为您完成工作:

<xsl:value-of select="sum(/documents/document[client_name='customer_x']//amount)"/>