【发布时间】:2022-01-06 12:31:29
【问题描述】:
我想将值的“TotalAmount”和“Tax”与//Category/ID 作为唯一值相加。 XSLT 必须删除重复项并对已删除重复项的值求和。因此,对于本示例,唯一 ID“S”是重复的,应将其删除,并将所需的值添加到另一个“S”。我无法让 XSLT 工作。
输入示例:
<root>
<Total>
<TotalAmount currencyID="EUR">100.00</TotalAmount>
<Tax currencyID="EUR">20.00</Tax>
<Category>
<ID>S</ID>
<Percent>21.000</Percent>
<Description>
<ID>Note</ID>
</Description>
</Category>
</Total>
<Total>
<TotalAmount currencyID="EUR">150.00</TotalAmount>
<Tax currencyID="EUR">20.00</Tax>
<Category>
<ID>S</ID>
<Percent>21.000</Percent>
<Description>
<ID>Note</ID>
</Description>
</Category>
</Total>
<Total>
<TotalAmount currencyID="EUR">200.00</TotalAmount>
<Tax currencyID="EUR">0</Tax>
<Category>
<ID>O</ID>
<Percent>0</Percent>
<Description>
<ID>Note</ID>
</Description>
</Category>
</Total>
</root>
XSLT
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kByP" match="Category" use="ID"/>
<xsl:template match="node()|@*">
<xsl:param name="pNewValue"/>
<xsl:copy>
<xsl:apply-templates select="node()|@*">
<xsl:with-param name="pNewValue" select="$pNewValue"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match=
"Category[generate-id()
=
generate-id(key('kByP', ID)[1])
]">
<xsl:copy>
<xsl:apply-templates select="node()|@*">
<xsl:with-param name="pNewValue" select=
"sum(key('kByP', ID)/TotalAmount)"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="Total"/>
<xsl:template match="TotalAmount/text()">
<xsl:param name="pNewValue"/>
<xsl:value-of select="$pNewValue"/>
</xsl:template>
</xsl:stylesheet>
需要的输出:
<root>
<Total>
<TotalAmount currencyID="EUR">250.00</TotalAmount>
<Tax currencyID="EUR">40.00</Tax>
<Category>
<ID>S</ID>
<Percent>21.000</Percent>
<Description>
<ID>Note</ID>
</Description>
</Category>
</Total>
<Total>
<TotalAmount currencyID="EUR">200.00</TotalAmount>
<Tax currencyID="EUR">0</Tax>
<Category>
<ID>O</ID>
<Percent>0</Percent>
<Description>
<ID>Note</ID>
</Description>
</Category>
</Total>
</root>
【问题讨论】:
标签: xslt