我输入xml为:
<root>
<SalesOrderLine>
<Item><ID>1056365</ID></Item>
<Quantity>1.00</Quantity>
<UnitPrice><UnitAmount>4.4</UnitAmount></UnitPrice>
</SalesOrderLine>
<SalesOrderLine>
<Item><ID>1056365</ID></Item>
<Quantity>1.00</Quantity>
<UnitPrice><UnitAmount>8.4</UnitAmount></UnitPrice>
</SalesOrderLine>
<SalesOrderLine>
<Item><ID>1056366</ID></Item>
<Quantity>1.00</Quantity>
<UnitPrice><UnitAmount>0.00</UnitAmount></UnitPrice>
</SalesOrderLine>
</root>
预期的输出xml是:
<root1>
<SL>
<Item><ID>1056365</ID></Item>
<Quantity>2.00</Quantity>
<UnitPrice><UnitAmount>6.4</UnitAmount></UnitPrice>
</SL>
<SL>
<Item><ID>1056366</ID></Item>
<Quantity>1.00</Quantity>
<UnitPrice><UnitAmount>0.00</UnitAmount></UnitPrice>
</SL>
</root>
行数量=总和(具有相同项目ID的行数量) 行数=总和(行数*行价)/总和(具有相同项目ID的行数)
有人可以建议如何使用XSLT吗?
答案 0 :(得分:0)
我相信这是你正在寻找的XSL。它使用for-each-groups中的变量来计算每个销售订单行的实际总数(即其数量乘以其单位价格)。然后将该变量求和并除以数量总和,以正确计算总体单价。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="root">
<root1>
<xsl:for-each-group select="SalesOrderLine" group-by="Item/ID">
<xsl:variable name="QuantitySum" select="sum(current-group()/Quantity)"/>
<xsl:variable name="SLTotals">
<xsl:for-each select="current-group()">
<SLTotal><xsl:value-of select="Quantity * UnitPrice/UnitAmount"/></SLTotal>
</xsl:for-each>
</xsl:variable>
<SL>
<Item>
<ID>
<xsl:value-of select="current-grouping-key()"/>
</ID>
</Item>
<Quantity>
<xsl:value-of select="$QuantitySum"/>
</Quantity>
<UnitPrice>
<UnitAmount>
<xsl:value-of select="sum($SLTotals/SLTotal) div $QuantitySum"/>
</UnitAmount>
</UnitPrice>
</SL>
</xsl:for-each-group>
</root1>
</xsl:template>