如何在xslt中使用group进行求和和删除重复

时间:2017-02-07 17:18:39

标签: xml xslt group-by xslt-1.0

我需要对所有输入元素进行分组并执行一些操作。

如果我得到输入 -

$('.icon').click(function() {

  if ($("#map").hasClass("down")) {
    $("#map").removeClass("down");
    $("#map").animate({
      height: "50%"
    }, 600);

  } else {

    $("#map").animate({
      height: "4%"
    }, 350);
    $("#map").addClass("down");
  }

});

我必须按元素ProductIdentifier分组,如果有2个或2个以上相同的ProductIdentifier,那么我只需要发送第一个Productidentifier副本,数量必须是所有相同产品标识符的总和。

输出 -

 <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>

我的XSLT -

<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>

输出就是这样 -

 <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>

如何总和100 + 200 = 300?

1 个答案:

答案 0 :(得分:0)

对于数量,请执行:

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