[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: how to group nodes by id?
--- 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|