【问题标题】:How to do sum and remove duplicate using group by in xslt如何在 xslt 中使用 group by 求和并删除重复项
【发布时间】: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 不是“为我编写代码”网站。
  • 您的输入是否有像&lt;ns1:users&gt; 这样的前缀元素?如果是,请添加缺少的命名空间声明。您的 XSLT 似乎可以与另一个输入一起使用,其中元素没有前缀,例如&lt;users&gt;.

标签: xml xslt group-by xslt-1.0


【解决方案1】:

对于数量,做:

<ns1:Quantity>
    <xsl:value-of select="sum(key('ProductIdentifier', ProductIdentifier)/Quantity)"/>
</ns1:Quantity>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多