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())) > 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>
--~--