当您使用 XSLT2.0 时,您可以使用xsl:for-each-group通过参数元素中的 ID 对事件元素进行分组
<xsl:for-each-group select="Event" group-by="Parameter[Name='#ID']/Value">
我不确定您是要汇总“AMT”元素还是单独输出它们,但是要单独输出它们,您会这样做(使用单独的匹配模板来输出它们)
<xsl:apply-templates select="current-group()/Parameter[Name='AMT']"/>
把它们加起来你会这样做
<xsl:value-of select="sum(current-group()/Parameter[Name='AMT']/Value)"/>
这是完整的 XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/*">
<xsl:for-each-group select="Event" group-by="Parameter[Name='#ID']/Value">
<Result>
<ID>
<!-- <xsl:value-of select="Parameter[Name='#ID']/Value"/> -->
<xsl:value-of select="current-grouping-key()" />
</ID>
<xsl:apply-templates select="current-group()/Parameter[Name='AMT']"/>
<TOTAL_AMT>
<xsl:value-of select="sum(current-group()/Parameter[Name='AMT']/Value)"/>
</TOTAL_AMT>
</Result>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="Parameter[Name='AMT']">
<AMT>
<xsl:value-of select="Value"/>
</AMT>
</xsl:template>
</xsl:stylesheet>
应用于以下 XML 时
<Events>
<Event>
<Parameter>
<Name>#ID</Name>
<Value>3</Value>
</Parameter>
<Parameter>
<Name>AMT</Name>
<Value>911</Value>
</Parameter>
</Event>
<Event>
<Parameter>
<Name>#ID</Name>
<Value>3</Value>
</Parameter>
<Parameter>
<Name>AMT</Name>
<Value>10</Value>
</Parameter>
</Event>
<Event>
<Parameter>
<Name>#ID</Name>
<Value>4</Value>
</Parameter>
<Parameter>
<Name>AMT</Name>
<Value>11</Value>
</Parameter>
</Event>
</Events>
以下是输出
<Result>
<ID>3</ID>
<AMT>911</AMT>
<AMT>10</AMT>
<TOTAL_AMT>921</TOTAL_AMT>
</Result>
<Result>
<ID>4</ID>
<AMT>11</AMT>
<TOTAL_AMT>11</TOTAL_AMT>
</Result>