2011-12-28 20 views
1

私は以下のXMLデータを持っています。私はこのデータの構造を支配していません。これが私がそれを受け取っている方法です。グループ化とグループ合計を含むXSLT

<data> 
    <row> 
    <value name="CustomerID">1</value> 
    <value name="CustomerName">Joe</value> 
    <value name="Cost">22.50</value> 
    </row> 
    <row> 
    <value name="CustomerID">1</value> 
    <value name="CustomerName">Joe</value> 
    <value name="Cost">55.50</value> 
    </row> 
    <row> 
    <value name="CustomerID">2</value> 
    <value name="CustomerName">Jane</value> 
    <value name="Cost">10</value> 
    </row> 
    <row> 
    <value name="CustomerID">2</value> 
    <value name="CustomerName">Jane</value> 
    <value name="Cost">13.50</value> 
    </row> 
    <row> 
    <value name="CustomerID">3</value> 
    <value name="CustomerName">Jim</value> 
    <value name="Cost">50</value> 
    </row> 
</data> 

私は、顧客IDによって、各顧客の合計でグループ化されたデータを表示するには、XSLT v1.0のを使用する必要があります。私は多くの記事を検索しようとしましたが、この種の奇妙な構造はありません。

+0

XSLTのバージョンは何ですか? –

+0

V1.0ポスト感謝 –

答えて

3

用途:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:key name="k" match="row" use="value[@name = 'CustomerID']"/> 

    <xsl:template match="data"> 
     <xsl:copy> 
      <xsl:apply-templates select="row[generate-id(.) = generate-id(key('k', value[@name = 'CustomerID']))]"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="row"> 
     <xsl:copy> 
      <xsl:copy-of select="value[@name = 'CustomerID']"/> 
      <xsl:copy-of select="value[@name = 'CustomerName']"/> 
      <sum> 
       <xsl:value-of select="sum(key('k', value[@name = 'CustomerID'])/value[@name = 'Cost'])"/> 
      </sum> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

出力:

<data> 
    <row> 
    <value name="CustomerID">1</value> 
    <value name="CustomerName">Joe</value> 
    <sum>78</sum> 
    </row> 
    <row> 
    <value name="CustomerID">2</value> 
    <value name="CustomerName">Jane</value> 
    <sum>23.5</sum> 
    </row> 
    <row> 
    <value name="CustomerID">3</value> 
    <value name="CustomerName">Jim</value> 
    <sum>50</sum> 
    </row> 
</data> 
+0

私はそれを完了するために必要な優れた正確に変更しました。感謝万円! –

+0

@ user1119252、よろしくお願いします。 –