2011-12-28 58 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> 

我需要使用XSLT v1.0來顯示按客戶ID分組的數據和每個客戶的總數。我試過搜索很多文章,但沒有任何這種奇怪的結構。

+0

什麼是XSLT版本? – 2011-12-28 12:12:03

+0

V1.0更改後發表感謝 – 2011-12-28 12:14:48

回答

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

非常好,我需要完成它。太感謝了! – 2011-12-28 12:52:45

+0

@ user1119252,不客氣。 – 2011-12-28 12:55:49