Your code will work if its called with
<xsl:apply-templates select="date"/>
rather than
<xsl:apply-templates select="*"/>
because position() is the position in the list of nodes selected by the
apply-templates.
I would suggest using last() rather than count(../date), my guess is it
would be more efficient, but that depends on the processor.
Michael Kay
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
jwhitney
Sent: 11 June 2003 19:55
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Current node position
Hello,
I'm trying to generate html code for "Date 1 of 2", "Date 2
of 2", etc., from
XML as below:
<a>
<b/>
<c/>
<date>text</date>
<date>text again</date>
</a>
from within a template that matches "d". The following
stylesheet fragment:
<xsl:template match="d">
<xsl:value-of select="position()" />
<xsl:text> of </xsl:text>
<xsl:value-of select="count(../date)" />
</xsl:template>
produces "3 of 2" and "4 of 2". Is there a way to restrict
position() to
evaluate the <date> nodes only? How else could it be done?
I'm new to XSLT, obviously. Thanks in advance for any help
with this.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list