2013-07-02 1 views
0

У меня возникли проблемы при создании XSLT, чтобы сделать то, что я думаю, что должно быть просто ...отдельные результаты XML в 2+ групп с использованием 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> 

идея заключается в том, чтобы создать новый «стол» каждый раз, когда новые «а», когда встречаются

+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

Смежные вопросы