2013-03-13 30 views
0

分組使用XSLT,我怎麼能更改以下:費用和相關類別分組和分用XSLT

<root> 
    <element id="1" Team="Rangers" Season="2011" Points="12" /> 
    <element id="2" Team="Rangers" Season="2012" Points="5" /> 
    <element id="3" Team="Rangers" Season="2012" Points="3" /> 
    <element id="4" Team="Astros" Season="2011" Points="12" /> 
    <element id="5" Team="Astros" Season="2011" Points="9" /> 
    <element id="5" Team="Astros" Season="2012" Points="2" /> 
</root> 

分爲:

<body> 
    <h2>Rangers</h2> 
    <table> 
    <tr><td>2011</td><td>12</td></tr> 
    <tr><td>2012</td><td>8</td></tr> 
    <tr><td>Total</td><td>20</td></tr> 
    <h2>Astros</h2> 
    <table> 
    <tr><td>2011</td><td>21</td></tr> 
    <tr><td>2012</td><td>2</td></tr> 
    <tr><td>Total</td><td>1227707</td></tr> 
    </table> 
</body> 

我試過了這個例子,但是它缺少額外Muenchian分組的需要。 Sums and Category Grouping with XSLT 任何幫助將不勝感激!

回答

0

這應做到:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:key name="kTeam" match="element" use="@Team" /> 
    <xsl:key name="kTeamYear" match="element" use="concat(@Team, '+', @Season)"/> 

    <xsl:template match="root"> 
    <body> 
     <xsl:apply-templates select="element[generate-id(.) = 
              generate-id(key('kTeam',@Team)[1])]" 
          mode="group"/> 
    </body> 
    </xsl:template> 

    <xsl:template match="element" mode="group"> 
    <xsl:variable name="thisTeam" select="key('kTeam',@Team)" /> 
    <h2> 
     <xsl:value-of select="@Team" /> 
    </h2> 
    <table> 
     <xsl:apply-templates 
     select="$thisTeam[generate-id() = 
          generate-id(key('kTeamYear', 
              concat(@Team, '+', @Season))[1] 
            )]" /> 
     <tr>  
     <td> 
      <xsl:text>Total</xsl:text> 
     </td> 
     <td> 
      <xsl:value-of select="sum($thisTeam/@Points)"/> 
     </td> 
     </tr> 
    </table> 
    </xsl:template> 

    <xsl:template match="element"> 
    <xsl:variable name="thisSeason" 
        select="key('kTeamYear', concat(@Team, '+', @Season))" /> 
    <tr> 
     <td> 
     <xsl:value-of select="@Season" /> 
     </td> 
     <td> 
     <xsl:value-of select="sum($thisSeason/@Points)" /> 
     </td> 
    </tr> 
    </xsl:template> 
</xsl:stylesheet> 

當你的樣品輸入運行,這將產生:

<body> 
    <h2>Rangers</h2> 
    <table> 
    <tr> 
     <td>2011</td> 
     <td>12</td> 
    </tr> 
    <tr> 
     <td>2012</td> 
     <td>8</td> 
    </tr> 
    <tr> 
     <td>Total</td> 
     <td>20</td> 
    </tr> 
    </table> 
    <h2>Astros</h2> 
    <table> 
    <tr> 
     <td>2011</td> 
     <td>21</td> 
    </tr> 
    <tr> 
     <td>2012</td> 
     <td>2</td> 
    </tr> 
    <tr> 
     <td>Total</td> 
     <td>23</td> 
    </tr> 
    </table> 
</body> 
+0

這是完美的謝謝! – user2166632

+0

@ user2166632很高興能幫到你。我可以通過使用複選框圖標來麻煩您標記此答案爲正確的。 – JLRishe