Subject: Re: [xsl] Creating unique groups From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx> Date: Mon, 6 Dec 2004 20:39:59 -0800 (PST) |
It is also worth exploring the XSLT 2.0 grouping features. Following is the XSLT 2.0 answer (which eliminates duplicates as well). <?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:template match="/root"> <root> <xsl:for-each-group select="group" group-by="@name"> <group name="{@name}"> <xsl:variable name="curr-group" as="element(entry)*"> <xsl:copy-of select="current-group()/*" /> </xsl:variable> <xsl:for-each select="distinct-values($curr-group/@name)"> <entry name="{.}" /> </xsl:for-each> </group> </xsl:for-each-group> </root> </xsl:template> </xsl:stylesheet> The stylesheet is tested with Saxon 8.1.. Regards, Mukul --- Dave Roe <david_roe@xxxxxxx> wrote: > Fantastic - that certainly does the trick, thank > you. > > Is there a way of extending this approach so that it > can de-duplicate > entries? > > For example, if I have: > > <root> > > <group name="group1"> > <entry name="entry1" /> > <entry name="entry2" /> > </group> > > <group name="group1"> > <entry name="entry2" /> > <entry name="entry3" /> > </group> > > </root> > > and I want to end up with: > > <root> > > <group name="group1"> > <entry name="entry1" /> > <entry name="entry2" /> > <entry name="entry3" /> > </group> > > </root> > > (with producing 2 entries for entry2). > > Thanks again, > /dave > > On Dec 3, 2004, at 11:29 PM, Mukul Gandhi wrote: > > > Hi Dave, > > Please try this XSL. It uses the Muenchian > > technique. > > > > <?xml version="1.0" encoding="UTF-8"?> > > <xsl:stylesheet > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > version="1.0"> > > > > <xsl:key name="by-group-name" match="group" > > use="@name" /> > > > > <xsl:template match="/root"> > > <root> > > <xsl:for-each select="group[generate-id(.) = > > generate-id(key('by-group-name', @name)[1])]"> > > <group name="{@name}"> > > <xsl:for-each select="key('by-group-name', > > @name)"> > > <xsl:copy-of select="*"/> > > </xsl:for-each> > > </group> > > </xsl:for-each> > > </root> > > </xsl:template> > > > > </xsl:stylesheet> > > > > Regards, > > Mukul __________________________________ Do you Yahoo!? All your favorites on one personal page Try My Yahoo! http://my.yahoo.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Creating unique groups, Dave Roe | Thread | [xsl] check for existance of an ele, Jake The Snake Brigg |
Re: [xsl] XSL-FO Page numbering, Tokushige Kobayashi | Date | [xsl] pulling ID or value-of inside, Benjamin Graff |
Month |