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

XSLT实现pack-1/pack-2两层按数量分组及关联统计求助

XSLT多层级分组正确实现方案

实现逻辑

  • pack-1层级直接以自身数量字段为分组键,分组后统计每组节点数即可得到对应计数
  • pack-2层级先通过ShippingContainerSerialCode和ShippingContainerSerialCodeReference的关联关系计算单节点总数量,再以总数量为分组键统计计数

完整XSLT代码(XSLT 2.0+)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 定义pack-2节点按ShippingContainerSerialCode匹配的key -->
    <xsl:key name="pack2-by-serial" match="pack-2" use="ShippingContainerSerialCode"/>

    <xsl:template match="/">
        <GroupResult>
            <!-- 处理pack-1层级分组 -->
            <Pack1Groups>
                <xsl:for-each-group select="//pack-1" group-by="Quantity">
                    <Group quantity="{current-grouping-key()}" count="{count(current-group())}"/>
                </xsl:for-each-group>
            </Pack1Groups>

            <!-- 处理pack-2层级分组 -->
            <Pack2Groups>
                <!-- 先计算所有pack-2的关联总数量,再按总数量分组 -->
                <xsl:for-each-group select="//pack-2" group-by="sum(Quantity | key('pack2-by-serial', ShippingContainerSerialCodeReference)/Quantity)">
                    <Group totalQuantity="{current-grouping-key()}" count="{count(current-group())}"/>
                </xsl:for-each-group>
            </Pack2Groups>
        </GroupResult>
    </xsl:template>
</xsl:stylesheet>

重复分组问题修复说明

  • 反向定义key匹配规则:key的匹配值应设为ShippingContainerSerialCode,查询时传入关联字段ShippingContainerSerialCodeReference的值,反向设置会导致关联匹配错误,产生冗余分组
  • 未先计算总数量再分组:如果先按原始数量分组再关联计算总数量,会导致同一总数量被拆分到多个分组,出现重复条目
  • 计数逻辑重复遍历节点:使用current-group()直接统计当前分组的节点数,避免二次遍历导致的计数错误

若使用XSLT 1.0版本,需采用Muenchian分组法实现,核心key定义逻辑与上述一致,分组语法调整为判断当前节点是否为同分组的首个节点即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:24:05