This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: counting the number of time i call a template
- To: xsl-list at lists dot mulberrytech dot com
- Subject: Re: [xsl] counting the number of time i call a template
- From: David Carlisle <davidc at nag dot co dot uk>
- Date: Fri, 19 Jan 2001 11:40:18 GMT
- References: <20010119110630.11092.qmail@web514.mail.yahoo.com>
- Reply-To: xsl-list at lists dot mulberrytech dot com
> The only way i found is
> to call a template, and (try to) count the number of
> time it's called.
well you can do that by passing the count as a parameter, but you also
need to make sure that your templates are called in the correct order.
For example suppose you have
<x>
<y/>
<y/>
<y/>
<y/>
<y/>
<y/>
</x>
and you wanted to get 1, 2, 3, 4, 5, 6 from the template for y
it wouldn't work to go
<xsl:template match="x">
<xsl:apply-templates/>
</xsl:template>
</xsl:template match="y">
some code to show how many times this template has been called.
</xsl:template>
as that could generate the numbers 1 to 6 in any order: you can't rely
on the system to apply the templates to the y elements in the natural
order.
But you can force the order by going
<xsl:template match="x">
<xsl:apply-templates select="y[1]"/>
</xsl:template>
</xsl:template match="y">
<xsl:param name="ycount" select="1"/>
y: <xsl:value-of select="$ycount"/>
<xsl:apply-templates select="following-sibling:y[1]">
<xsl:with-param name="ycount" select="$ycount+1"/>
</xsl:apply-templates/>
</xsl:template>
But I'd still expect that using xsl:number would be easier than doing
the above and making sure the ycount parameter was appropriately passed
to all templates.
David
_____________________________________________________________________
This message has been checked for all known viruses by Star Internet delivered
through the MessageLabs Virus Control Centre. For further information visit
http://www.star.net.uk/stats.asp
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list