Суммирование уникальных комбинационных значений в XSLT
Я пытаюсь сгруппировать и суммировать уникальную комбинацию узлов в XML.
<root>
<row>
<field1>720</field1>
<field2>8900</field2>
<field3>100</field3>
</row>
<row>
<field1>720</field1>
<field2>99998</field2>
<field3>120</field3>
</row>
<row>
<field1>720</field1>
<field2>8900</field2>
<field3>130</field3>
</row>
<row>
<field1>720</field1>
<field2>12403</field2>
<field3>130</field3>
</row>
</root>
Итак, для каждой уникальной комбинации field1 и field2 мне нужно получить сумму field3
Я понимаю, что group-by - это то, что можно использовать, но не знаю, как это реализовать.
1 ответ
Ниже приведен пример того, как вы можете использовать xsl:for-each-group
а также group-by
значения field1
а также field2
элементы для каждой строки. Для каждой группы произведите 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>