This is the Muenchian grouping solution.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:key name="by-grade" match="student" use="@grade" />
<xsl:template match="/root">
<root>
<grades>
<xsl:for-each select="students/student[generate-id() =
generate-id(key('by-grade', @grade)[1])]">
<grade level="{(_at_)grade}" />
</xsl:for-each>
</grades>
<xsl:copy-of select="students" />
</root>
</xsl:template>
</xsl:stylesheet>
As Mike has said, you can also use distinct-values() function with a
XSLT 2.0 stylesheet.
Regards,
Mukul
On 7/22/05, Raghupathy S <raghupathy(_dot_)s(_at_)gmail(_dot_)com> wrote:
Hi,
I'm a total newbie to XML / XSl, and I've been stuck with this problem.
Would be grateful for any suggestions / pointers
The problem -
Assuming I have an xml file
<root>
<students>
<student grade="first">abc</student>
<student grade="first">def</student>
<student grade="second">ghi</student>
<student grade="third">jkl</student>
<student grade="third">mno</student>
</students>
</root>
I need to transform this into the following xml using an XSL
<root>
<grades>
<grade level="first"/>
<grade level="second"/>
<grade level="third"/>
</grades>
<students>
<student grade="first">abc</student>
<student grade="first">def</student>
<student grade="second">ghi</student>
<student grade="third">jkl</student>
<student grade="third">mno</student>
</students>
</root>
I apologize if this is a totally newbie question, but ive been at my
wits end all day, trying to get this working.
Any advice / help would be most appreciated.
Thanks,
Rags
--~------------------------------------------------------------------
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>
--~--