xsl-list
[Top] [All Lists]

Re: [xsl] Grouping the elements

2006-09-14 05:52:04
Please try this stylesheet:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

   <xsl:output method="xml" indent="yes" />

   <xsl:key name="x" match="Root/*" use="local-name()" />

   <xsl:template match="/Root">
        <Root>
            <xsl:for-each select="*[generate-id() =
generate-id(key('x', local-name())[1])]">
                <xsl:choose>
                    <xsl:when test="count(key('x', local-name())) &gt; 1">
                        <xsl:element name="{local-name()}List">
                            <xsl:copy-of select="key('x', local-name())" />
                        </xsl:element>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:copy-of select="key('x', local-name())" />
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:for-each>
        </Root>
   </xsl:template>

</xsl:stylesheet>

This when applied to XML:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
   <year>2006</year>
   <year>2007</year>
   <year>2008</year>
   <week>1</week>
   <day>01</day>
   <day>02</day>
</Root>

Produces the wanted result:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
  <yearList>
     <year>2006</year>
     <year>2007</year>
     <year>2008</year>
  </yearList>
  <week>1</week>
  <dayList>
     <day>01</day>
     <day>02</day>
  </dayList>
</Root>


On 9/14/06, Arulraj <p_arulraj(_at_)yahoo(_dot_)com> wrote:
Hi,

I have the following xml for my input..

<?xml version="1.0" encoding="UTF-8"?>
<Root>
   <year>2006</year>
   <year>2007</year>
   <year>2008</year>
   <week>1</week>
   <day>01</day>
   <day>02</day>
</Root>


My expected output is

<Root>
   <yearList>
       <year>2006</year>
        <year>2007</year>
       <year>2008</year>
    <yearList>
   <week>1</week>
   <dayList>
        <day>01</day>
        <day>02</day>
    </dayList>
</Root>


I want to group the element using xslt 1.0 and here element name is not 
fixed..it will be varied. when we have the same element then we need a parent 
element which have the element's name with List (i.e., yearList)

Is it possible to grouping in xslt1.0?

regards,
raj


--
Regards,
Mukul Gandhi

http://gandhimukul.tripod.com

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--