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
________________________________________________________________________
--~------------------------------------------------------------------
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>
--~--