[xsl] counting preceding siblings in with-param

Subject: [xsl] counting preceding siblings in with-param
From: John Sands <WonkoWatson@xxxxxxxxx>
Date: Wed, 23 Jul 2003 10:38:44 -0400
I have a template that works correctly like this:

<xsl:template match="section">
  <xsl:variable name="section-number" select="count(preceding-sibling::section) + 1" />
  ...

("section" elements are interspersed with other elements, but I need
to number them "Section 1, Section 2, etc.").

I need to move the template into its own file (to make it reusable) and
so I need to pass in the section-number as a parameter, instead of
calculating it inside the template:

<xsl:template match="section">
  <xsl:param name="section-number" />
  ...

How do I get the same number, "count(preceding-sibling::section) + 1",
from the calling template? This:

<xsl:apply-templates select="section | comment | instructions">
   <xsl:with-param name="section-number" select="count(preceding-sibling::section) + 1" />
</xsl:apply-templates>

gives 1 every time. I suppose that's because the current node is not
the "section" node, but its parent, which has no preceding siblings
called "section"? But select="./count(preceding-sibling::section) + 1"
has the same problem. I'm worried that "with-param" is only calculated
once? (I'm using .NET 1.1).

Thanks,
John Sands



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


Current Thread