This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Enumerating template matches
- From: Joerg Heinicke <joerg dot heinicke at gmx dot de>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Fri, 01 Feb 2002 13:40:02 +0100
- Subject: Re: [xsl] Enumerating template matches
- References: <3C5A8903.4060808@it-c.dk>
- Reply-to: xsl-list at lists dot mulberrytech dot com
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@virbus.de
www.virbus.de
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list