RE: [xsl] Generating serial no.s for XML tags

Subject: RE: [xsl] Generating serial no.s for XML tags
From: Jarno.Elovirta@xxxxxxxxx
Date: Mon, 28 Apr 2003 14:06:20 +0300
Hi,

> I want to write a XSLT which displays serial no.s as
> the <tag> TAGs are found
> 
> I have written a XSL as below -
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; >
> <xsl:template match="rootelem/tag">
>      <xsl:value-of select="count(preceding::tag) + 1"
> />
>      
>      <xsl:if test="total">
>           <xsl:value-of select="count(preceding::tag)
> + 1" />
>      </xsl:if>
> 
> </xsl:template>
> </xsl:stylesheet>
> 
> I want that when <total> tag comes , an extra serial
> no. gets generated which is one more than the previous
> one. After the serial no. of <total> tag is o/p, the
> next serial no. resumes as 1 more than this.
> 
> The above stylesheet is generating output as 122345566
> . I want the o/p to come as 123456789(this includes
> serial no.s for <total> tag).

<xsl:template match="tag">
  <xsl:variable name="x" select="count(preceding::tag) + count(preceding::tag[total]) + 1" />
  <xsl:value-of select="$x"/>
  <xsl:if test="total">
    <xsl:value-of select="$x + 1" />
  </xsl:if>
</xsl:template>

But you might want to consider writing e.g. a recursive template to generate the serial number to eliminate the use of preceding axis.

Cheers,

Jarno - Assemblage 23: Document (Endanger Mix)

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread