2017-02-07 9 views
-3

すべての入力要素をグループ化して何らかのアクションを実行する必要があります。xsltでgroup byを使って合計を削除して削除する方法

私が出た場合、入力として - 私はProductIdentifier要素によってグループに持ち、その後、2または3つ以上の同じ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> 

すべての同じ商品IDの

出力 -

<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> 
関連する問題