2013-07-02 20 views
0

我無法創建XSLT這樣做,我想應該是簡單的東西2+組...單獨的XML結果轉換成使用XSL

鑑於以下XML:

<DATA_DS> 
<LIST_ITEMS> 
    <ITEMS> 
     <abc>2011</abc> 
     <def>ABC Company</def> 
     <value>23</value> 
    </ITEMS> 
    <ITEMS> 
     <abc>2011</abc> 
     <def>ABC Company 1</def> 
     <value>11</value> 
    </ITEMS>  
    <ITEMS> 
     <abc>2010</abc> 
     <def>ABC Company 2</def> 
     <value>15</value> 
    </ITEMS>    
    <ITEMS> 
     <abc>2010</abc> 
     <def>ABC Company 3</def> 
     <value>6</value> 
    </ITEMS> 
    <ITEMS> 
     <abc>2010</abc> 
     <def>ABC Company 4</def> 
     <value>44</value> 
    </ITEMS>     
</LIST_ITEMS></DATA_DS> 

怎麼會我去使用XSLT把它變成是這樣的:

<table> 
    <row>23</row> 
    <row>11</row> 
</table> 

<table> 
    <row>15</row> 
    <row>6</row> 
    <row>44</row> 
</table> 

的想法是創建一個新的「表」每一個新的「ABC」遇到

時間
+0

XSLT 1.0或2.0? – ABach

+0

要麼做。 – Kevin

回答

1

在xslt 2.0指令for-each-group是你在找什麼。

繼樣式表

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes" /> 

    <xsl:template match="/"> 
     <output> 
      <xsl:for-each-group select="DATA_DS/LIST_ITEMS/ITEMS" group-by="abc"> 
       <table> 
        <xsl:for-each select="current-group()"> 
         <row> 
          <xsl:value-of select="current()/value" /> 
         </row> 
        </xsl:for-each> 
       </table> 
      </xsl:for-each-group> 
     </output> 
    </xsl:template> 
</xsl:stylesheet> 

產生輸出

<?xml version="1.0" encoding="UTF-8"?> 
<output> 
    <table> 
     <row>23</row> 
     <row>11</row> 
    </table> 
    <table> 
     <row>15</row> 
     <row>6</row> 
     <row>44</row> 
    </table> 
</output> 
+0

我曾經看過每個組,但我只是需要看一個很好的例子來理解它。謝謝! – Kevin