Subject: [xsl] Re: how to group nodes by id? From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Mon, 2 Dec 2002 09:20:03 -0800 (PST) |
--- G. Ken Holman wrote: > > At 2002-12-02 07:48 -0800, Artur Matysiak wrote: > > does anybody know how to convert the following XML: > > Below is a solution using variables and a solution using keys. Take > your > pick. Grouping algorithms are documented in the FAQ ... what aspects > of > the documentation did you find confusing? > > I hope this helps. > > ...................... Ken > > T:\ftemp>type artur.xml > <elems> > <elem id="1"> > <elem id="1"/> > </elem> > <elem id="1"> > <elem id="2"/> > </elem> > <elem id="2"> > <elem id="1"/> > </elem> > <elem id="2"> > <elem id="2"/> > </elem> > </elems> > [solution with xsl:variable skipped] > T:\ftemp>type artur2.xsl > <?xml version="1.0" encoding="iso-8859-1"?> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version="1.0"> > > <xsl:output indent="yes"/> > > <xsl:key name="elems" match="elem[elem]" use="@id"/> > > <xsl:template match="elems"> > <elems> > <xsl:for-each > select="elem[generate-id(.)=generate-id(key('elems',@id))]"> > <xsl:copy> > <xsl:copy-of select="@*"/> > <xsl:copy-of select="key('elems',@id)/node()"/> > </xsl:copy> > </xsl:for-each> > </elems> > </xsl:template> > > </xsl:stylesheet> > > T:\ftemp>saxon artur.xml artur2.xsl > <?xml version="1.0" encoding="utf-8"?> > <elems> > <elem id="1"> > > <elem id="1"/> > > > <elem id="2"/> > > </elem> > <elem id="2"> > > <elem id="1"/> > > > <elem id="2"/> > > </elem> > </elems> > T:\ftemp> > > T:\ftemp> > This solution will work only if the child "element"s have all unique "id" attributes. For example, when applied on the following source xml: <elems> <elem id="1"> <elem id="1"/> <elem id="2"/> </elem> <elem id="1"> <elem id="2"/> </elem> <elem id="1"> <elem id="2"/> </elem> <elem id="1"> <elem id="3"/> </elem> <elem id="2"> <elem id="1"/> </elem> <elem id="2"> <elem id="2"/> </elem> </elems> the result of the transformation is: <?xml version="1.0" encoding="utf-8"?> <elems> <elem id="1"> <elem id="1"/> <elem id="2"/> <elem id="2"/> <elem id="2"/> <elem id="3"/> </elem> <elem id="2"> <elem id="1"/> <elem id="2"/> </elem> </elems> Probably I misunderstand the problem, but I think that the re-structuring had to be accompanied by elimination of elements with non-unique "id" attributes. ===== Cheers, Dimitre Novatchev. http://fxsl.sourceforge.net/ -- the home of FXSL __________________________________________________ Do you Yahoo!? Yahoo! Mail Plus - Powerful. Affordable. Sign up now. http://mailplus.yahoo.com XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Re: how to group nodes by id?, Dimitre Novatchev | Thread | [xsl] copy-of select in textaereas, Sylvia Egger |
Re: [xsl] & replacemnt?, David Carlisle | Date | RE: [xsl] & replacemnt?, Michael Kay |
Month |