我需要对来自不同节点的元素求和。我试着编写不同的代码变体,但看起来,我会遗漏一些重要的东西。这是我简化的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
答案 0 :(得分:2)
让XPath为您完成工作:
<xsl:value-of select="sum(/documents/document[client_name='customer_x']//amount)"/>