2017-02-07 16 views
-3

У меня есть требование группировать все элементы ввода и выполнять некоторые действия.Как сделать сумму и удалить дубликат с помощью группы по xslt

Если я получить вход в -

<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 то я должен отправить только 1-ый экземпляр 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?

+2

Что вы пробовали до сих пор? StackOverflow не является сайтом «написать мой код для меня». –

+1

Начните здесь: http://www.jenitennison.com/xslt/grouping/muenchian.html –

+0

Имеет ли ваш ввод префиксные элементы, такие как ''? Если да, добавьте пропущенные объявления пространства имен. Ваш XSLT, похоже, работает с другим входом, где элементы не имеют префикса, например. ''. –

ответ

0

Для величины, сделайте следующее:

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