2017-03-07 77 views
0

我對XSLT相當陌生,並且遇到當前問題。我在Stackflow中做了一些搜索(看起來像Muenchian方法是常見的組方法),但我似乎無法模仿一些發佈的想法。按XSLT中的ID和總金額分組

因此,我正在使用訂單項讀取系統,其中我試圖在XSLT中編寫代碼來讀取每一行以檢查供應商ID是否相同,如果爲true,則會將其聚合成一行,然後總結金額。如果不是這樣,它應該開始一個帶有ID的新行並且總和金額等。我使用的XML版本= '1.0'

下面是XML我目前的數據文件:

<data> 
<row> 
    <column1>06-11111</column1> 
    <column2>CP</column2> 
    <column3>744.04</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11111</column1> 
    <column2>CP</column2> 
    <column3>105.09</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11111</column1> 
    <column2>CP</column2> 
    <column3>1366.24</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11111</column1> 
    <column2>CP</column2> 
    <column3>485.71</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11112</column1> 
    <column2>Ever</column2> 
    <column3>459.60</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11112</column1> 
    <column2>Ever</column2> 
    <column3>409.14</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11112</column1> 
    <column2>Ever</column2> 
    <column3>397.12</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11113</column1> 
    <column2>GE</column2> 
    <column3>1425</column3> 
    <column4>CAD</column4> 
</row> 
<row> 
    <column1>06-11114</column1> 
    <column2>Husky</column2> 
    <column3>-215.14</column3> 
    <column4>USD</column4> 
</row> 
<row> 
    <column1>06-11114</column1> 
    <column2>Husky</column2> 
    <column3>2015</column3> 
    <column4>USD</column4> 
</row> 
<row> 
    <column1>06-11114</column1> 
    <column2>Husky</column2> 
    <column3>11195.34</column3> 
    <column4>USD</column4> 
</row> 
</data> 

輸出我想運行XSLT後實現的是

06 -11111 | CP | 2701.08

06-11112 | Ever | 1265.86

06-11113 | GE | 1425

06-11114 |赫斯基| 12995.20

任何幫助讓我開始將是太棒了!

+0

如果您的輸入是XML,那麼請將其顯示爲XML。對於XSLT 1.0中的分組,請從以下網址開始:http://www.jenitennison.com/xslt/grouping/muenchian.html –

+0

感謝您回覆michael.hor257k!編輯我的問題以提供XML格式 – Echan

+0

答案在前面引用的文章中。在SO上發佈的Muenchian分組的許多例子中。 –

回答

0

這裏是使用Muenchian方法的分組。我會讓你根據小數點數來正確地獲取格式正確的數字。 我通常不使用它,因爲它是有限的,棘手的,不適合推動編程。但是,它會在今天爲你工作。

<xsl:template match="@* | node()"> 
    <xsl:apply-templates select="@* | node()"/> 
</xsl:template> 

<xsl:key name="rows" match="row" use="concat(column1, '||', column2)" /> 

<xsl:template match="data"> 
    <xsl:for-each select="row[generate-id(.) = generate-id(key('rows', concat(column1, '||', column2))[1])]"> 
    <xsl:sort select="column1" data-type="text" order="ascending"/> 
    <xsl:sort select="column2" data-type="text" order="ascending"/> 

    <xsl:value-of select="concat(column1,'|',column2,'|')"/> 

    <xsl:variable name="mySum"> 
     <xsl:value-of select="sum(key('rows', concat(column1, '||', column2))/column3)"/> 
    </xsl:variable> 

    <xsl:value-of select="format-number($mySum,'#,##0.00')"/> 

    <xsl:value-of select="'&#xD;&#xA;'"/> 
    </xsl:for-each> 
</xsl:template> 
+0

謝謝@ Bluewood66的幫助!非常感謝它。 – Echan