Subject: Re: [xsl] Add order of nodes From: David Carlisle <davidc@xxxxxxxxx> Date: Wed, 9 Feb 2005 12:05:13 GMT |
Joris wrote > <doc> > <fragment>...</fragment> > <fragment>...</fragment> > <fragment>...</fragment> > ... > </doc> > > I need a <xsl:template match="fragment"> that produces this output: > > <doc> > <fragment pos="1">...</fragment> > <fragment pos="2">...</fragment> > <fragment pos="3">...</fragment> > ... > </doc> > > Can I use position() for that? Yes indeed. use this tremplate: <xsl:template match="fragment"> <xsl:copy> <xsl:attribute name="pos"><xsl:value-of select="position()"/></xsl:attribute> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> (in conjunction with this template) <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> You should also add a template <xsl:template match="doc"> <doc> <xsl:copy-of select="@*"/> <xsl:apply-templates select="fragment"/> </doc> </xsl:template> to make sure that the current node list when applying templates to fragments does just consist of fragment elements so position() goes 1 2 3 otherwise with the select="node()|@*" it would also include white space text so the fragment elements would be in positions 2 4 6 and if the doc element had any attributes the position of the fragment nodes in the node set returned by "node()|@* would be increased accordingly. David ________________________________________________________________________ This e-mail has been scanned for all viruses by Star. The service is powered by MessageLabs. For more information on a proactive anti-virus service working around the clock, around the globe, visit: http://www.star.net.uk ________________________________________________________________________
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Add order of nodes, Joris Gillis | Thread | Re: [xsl] Add order of nodes, Joris Gillis |
RE: [xsl] Add order of nodes, Robert Soesemann | Date | Re: [xsl] Add order of nodes, David Carlisle |
Month |