2013-07-02 19 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