You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT 1.0使用xsl:for-each转换结果覆盖 如何实现属性分组求和

问题根源

你用<xsl:for-each>做累加出现值覆盖,是因为用了过程式语言的循环赋值思路写XSLT:XSLT 1.0的变量属于不可变值,定义后无法重新赋值,循环内定义的同名变量仅在当前循环分支作用域生效,根本无法实现跨循环的累加逻辑。

最简实现

不需要写循环遍历,直接用XPath 1.0原生的sum()条件聚合即可,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/Test">
        <Test>
            <xsl:attribute name="value1Sum">
                <xsl:value-of select="sum(Tests/Tests1[@name='value1']/@value)"/>
            </xsl:attribute>
            <xsl:attribute name="value2Sum">
                <xsl:value-of select="sum(Tests/Tests1[@name='value2']/@value)"/>
            </xsl:attribute>
        </Test>
    </xsl:template>
</xsl:stylesheet>
逻辑说明
  • 路径表达式Tests/Tests1[@name='value1']会自动匹配所有符合name属性条件的Tests1节点,无需手动写for-each遍历
  • sum()函数会直接对选中节点集的value属性做数值求和,完全规避变量作用域、值覆盖的问题
  • 转换后输出结果和预期完全一致:<Test value1Sum="40" value2Sum="60"></Test>

内容的提问来源于stack exchange,提问作者Sree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:01:03