我需要对所有输入元素进行分组并执行一些操作。
如果我得到输入为 -
<ns1:users>
<ns1:user>
<ns1:name>A</ns1:name>
<ns1:ProductIdentifier>1234</ns1:ProductIdentifier>
<ns1:Quantity>100</ns1:Quantity>
</ns1:user>
<ns1:user>
<ns1:name>B</ns1:name>
<ns1:ProductIdentifier>1234</ns1:ProductIdentifier>
<ns1:Quantity>200</ns1:Quantity>
</ns1:user>
<ns1:user>
<ns1:name>C</ns1:name>
<ns1:ProductIdentifier>12345</ns1:ProductIdentifier>
<ns1:Quantity>300</ns1:Quantity>
</ns1:user>
</ns1:users>
我必须按元素产品标识符分组,如果有 2 个或超过 2 个相同的产品标识符,那么我只需要发送产品标识符的第一个副本,并且数量必须是所有相同产品标识符的总和。
输出-
<ns1:users>
<ns1:user>
<ns1:name>A</ns1:name>
<ns1:ProductIdentifier>1234</ns1:ProductIdentifier>
<ns1:Quantity>300</ns1:Quantity>
</ns1:user>
<ns1:user>
<ns1:user>
<ns1:name>C</ns1:name>
<ns1:ProductIdentifier>12345</ns1:ProductIdentifier>
<ns1:Quantity>300</ns1:Quantity>
</ns1:user>
</ns1:users>
我的 XSLT -
<xsl:key match="user" name="ProductIdentifier" use="ProductIdentifier"/>
<xsl:template match="/">
<xsl:for-each select="users/user[generate-id()=generate-id(key('ProductIdentifier',ProductIdentifier)[1])]">
<ns1:user>
<ns1:name>
<xsl:value-of select="name"/>
</ns1:name>
<ns1:ProductIdentifier>
<xsl:value-of select="ProductIdentifier"/>
</ns1:ProductIdentifier>
<ns1:Quantity>
<xsl:for-each select="key('ProductIdentifier',ProductIdentifier)">
<xsl:value-of select="sum(Quantity)"/>
</xsl:for-each>
</ns1:Quantity>
</ns1:user>
</xsl:for-each>
</ns1:users>
输出是这样的——
<ns1:users>
<ns1:user>
<ns1:name>A</ns1:name>
<ns1:ProductIdentifier>1078859</ns1:ProductIdentifier>
<ns1:Quantity>100200</ns1:Quantity>
</ns1:LeftOnBoardPart>
<ns1:LeftOnBoardPart>
<ns1:name>C</ns1:name>
<ns1:ProductIdentifier>C</ns1:ProductIdentifier>
<ns1:Quantity>300</ns1:Quantity>
</ns1:LeftOnBoardPart>
</ns1:LeftOnBoardParts>
如何求和 100 + 200 = 300?
对于数量,请执行:
<ns1:Quantity>
<xsl:value-of select="sum(key('ProductIdentifier', ProductIdentifier)/Quantity)"/>
</ns1:Quantity>