xsl-list
[Top] [All Lists]

Re: Add order of nodes

2005-02-09 05:05:13

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



<Prev in Thread] Current Thread [Next in Thread>