Re: [xsl] Enumerating template matches

Subject: Re: [xsl] Enumerating template matches
From: Joerg Heinicke <joerg.heinicke@xxxxxx>
Date: Fri, 01 Feb 2002 13:40:02 +0100
Either

<xsl:template match="B">
  <xsl:apply-templates select="C">
    <xsl:with-param name="match_number" select="position()"/>
  </xsl:apply-templates>
</xsl:template>

<xsl:template match="C">
  <xsl:param name="match_number"/>
  <xsl:value-of select="$match_number"/>
</xsl:template>

or

<xsl:template match="C">
  <xsl:value-of select="count(../preceding-sibling::B) + 1"/>
</xsl:template>

Regards,

Joerg


Morten wrote:



Hi list. I'm in the process of transforming some XML into a format edible by my RDBMS. Given the structure:

<A>
  <B><C/><C/>...<C/></B>
  <B><C/><C/>...<C/></B>
   .
   .
</A>

Is there a way I can enumerate the template matches for B and pass
that value to the template match for C? Ie. the first matching B
element gets a value 1, and passes that on to the template match for
C (as a parameter or by having C read it from its parent).

I was thinking something like using

<template match="A">
  <!-- Pseudo: declare a "variable" match_number here -->
  <for-each select="B">
    <call-template name="C"><with-param name="match_number"> ..
  <!-- Pseudo: increase value of match_number by one -->
  </for-each>
</template>

But I know that I cannot reassign the value of a "variable" in XSLT, so
I need some other way to "increment" (or keep track of) match_number.

Thanks,

Morten


--

System Development
VIRBUS AG
Fon  +49(0)341-979-7411
Fax  +49(0)341-979-7409
joerg.heinicke@xxxxxxxxx
www.virbus.de


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



Current Thread