Я пытаюсь суммировать элементы, только если код уникален.
У меня есть XML:
<ITEM>
<NAME>Brambory 10 kg</NAME>
<CODE>4</CODE>
<AMOUNT>23</AMOUNT>
<COUNT>19</COUNT>
</ITEM>
<ITEM>
<NAME>Česnek 1 kg</NAME>
<CODE>89</CODE>
<AMOUNT>11</AMOUNT>
<COUNT>10</COUNT>
</ITEM>
<ITEM>
<NAME>Neděle - Příbram</NAME>
<CODE>SHIPPING140</CODE>
<AMOUNT>16</AMOUNT>
<COUNT>16</COUNT>
</ITEM>
<ITEM>
<NAME>Úterý - Liberec</NAME>
<CODE>SHIPPING122</CODE>
<AMOUNT>10</AMOUNT>
<COUNT>10</COUNT>
</ITEM>
Суммирую только количество товаров, если место доставки SHIPPING122
.
Я использую этот XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="itemkey" match="ITEM" use="concat(NAME, CODE)"/>
<xsl:template match="/ORDERS">
<xsl:copy>
<xsl:apply-templates select="descendant::ITEM[generate-id() = generate-id(key('itemkey', concat(NAME, CODE))[1])]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ITEM">
<xsl:copy>
<xsl:variable name="curr-group" select="key('itemkey', concat(NAME, CODE))" />
<xsl:copy-of select="CODE|NAME"/>
<AMOUNT>
<xsl:value-of select="sum($curr-group/AMOUNT)"/>
</AMOUNT>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Он отлично работает, но у меня есть сумма всех товаров. Но мне нужна сумма, только если КОД доставки SHIPPING122. Пытаюсь отфильтровать по тесту CODE = 'SHIPPING107'
, но не работает.
Предпочтительный XML вывод:
<ITEM>
<NAME>Brambory 10 kg</NAME>
<CODE>4</CODE>
<AMOUNT>10</AMOUNT>
</ITEM>
<ITEM>
<NAME>Česnek 1 kg</NAME>
<CODE>89</CODE>
<AMOUNT>3</AMOUNT>
</ITEM>
<ITEM>
<NAME>Úterý - Liberec</NAME>
<CODE>SHIPPING122</CODE>
<AMOUNT>10</AMOUNT>
<COUNT>10</COUNT>
</ITEM>
Когда место доставки с CODE = 'SHIPPING122'
Я хотел бы суммировать товары Брамбори, Чеснек и др. c. только с этого места доставки, а не со всех заказов (все места доставки).