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

XSLT按Name分组后对Status为Draft的Amount字段条件求和问题

XSLT分组条件求和修复方案

问题根因

你当前XSLT中Charges_Draft字段的求和逻辑错误:
原表达式sum(current-group()/wd:Amount[current-group()/wd:Status = 'Draft'])的判断逻辑为:只要分组内存在任意一个状态为Draft的条目,就将分组内所有Amount值全部纳入求和,因此得到了错误的60结果。

修复方法

将Charges_Draft对应的求和表达式修改为:先过滤分组内状态为Draft的条目,再对这些条目的Amount值求和,即sum(current-group()[wd:Status = 'Draft']/wd:Amount)。

完整修复后的XSLT代码

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:wd="urn:com.test/bsvc" exclude-result-prefixes="wd">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    
    <xsl:template match="/">
        <xsl:for-each-group select="wd:Data/wd:Entry" group-by="wd:Name">
            <Details>
                <ID>
                    <xsl:value-of select="wd:ID"/>
                </ID>
                <Name>
                    <xsl:value-of select="wd:Name"/>
                </Name>
                <Total_Unverified_Amount>
                    <xsl:value-of select='format-number(sum(current-group()/wd:Amount),"##.00")'/>
                </Total_Unverified_Amount>
                <Charges_Draft>
                    <xsl:value-of select="sum(current-group()[wd:Status = 'Draft']/wd:Amount)"/>
                </Charges_Draft>
            </Details>
        </xsl:for-each-group>
    </xsl:template>
</xsl:stylesheet>

输出结果

运行上述代码后即可得到你期望的输出:

<Details>
   <ID>123</ID>
   <Name>ABC</Name>
   <Total_Unverified_Amount>60.00</Total_Unverified_Amount>
   <Charges_Draft>50</Charges_Draft>
</Details>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 11:24:06