在XSLT中汇总唯一的组合值

时间:2018-04-04 00:35:59

标签: xml xslt xslt-1.0 xslt-2.0 xslt-grouping

我正在尝试对XML中的节点的唯一组合进行分组和求和。

{{1}}

因此,对于field1和field2的每个唯一组合,我需要生成field3的总和

我理解group-by是可以使用的东西,但不知道如何实现它

1 个答案:

答案 0 :(得分:1)

以下示例说明如何使用xsl:for-each-groupgroup-by每行的field1field2元素的值。对于每个组,生成sum()元素field3@key以展示分组键值:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output indent="yes"/>
    <xsl:template match="/">
        <summary>
            <xsl:for-each-group select="/root/row" 
                                group-by="string-join((field1,field2),'-')">
                <sum key="{current-grouping-key()}">
                    <xsl:value-of select="sum(current-group()/field3)" />
                </sum>
            </xsl:for-each-group>
        </summary>
    </xsl:template>
</xsl:stylesheet>

对样本数据运行时,会产生以下输出:

<summary>
   <sum key="720-8900">230</sum>
   <sum key="720-99998">120</sum>
   <sum key="720-12403">130</sum>
</summary>