【发布时间】:2017-02-07 17:18:39
【问题描述】:
我需要对所有输入元素进行分组并执行一些操作。
如果我得到输入 -
<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>
我必须按元素 ProductIdentifier 分组,如果有 2 个或超过 2 个相同的 ProductIdentifier,那么我只需发送 Productidentifier 的第一个副本,并且数量必须是所有相同产品标识符的总和。
输出 -
<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 相加?
【问题讨论】:
-
到目前为止你尝试过什么? StackOverflow 不是“为我编写代码”网站。
-
您的输入是否有像
<ns1:users>这样的前缀元素?如果是,请添加缺少的命名空间声明。您的 XSLT 似乎可以与另一个输入一起使用,其中元素没有前缀,例如<users>.
标签: xml xslt group-by xslt-1.0