In general, move the "test" condition into a predicate in the select
expression of the xsl:for-each. Change
<xsl:for-each select="x">
<xsl:if test="y">
to
<xsl:for-each select="x[y]">
In your example it's not quite so easy because you are defining a variable
before the <xsl:if>, and the variable itself accesses the position. I don't
understand your logic well enough at this time of night to suggest a
rewrite.
Incidentally,
<xsl:variable name="x"><xsl:value-of select="y"/></xsl:variable>
should in 99.99% of cases be rewritten
<xsl:variable name="x" select="y"/>
Michael Kay
-----Original Message-----
From: Karl J. Stubsjoen [mailto:karl(_at_)meetscoresonline(_dot_)com]
Sent: 22 July 2004 23:46
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Return position in for-each
Hello,
A disadvantage to an xsl:for-each is that the position()
increases by one
for each step. so, if an xsl:if test validates the current
step and says
"Yes apply templates for this step", "don't apply templates
for this step",
and you are interested in a positiion which reflects the
total number of
"YES" steps... well you have a problem. Take into consideration this
for-each rule:
<xsl:for-each select="Entry">
<xsl:variable name="element_name"><xsl:value-of
select="concat('competitor_name_',position())"/></xsl:variable>
<xsl:if
test="string($BROWSER_VARS//ELEMENT[(_at_)name=$element_name]/.)">
<tr>
<!-- [[[ HERE WE ADD A COLUMN THAT HAS AN INCREMENTING
NUMBER ]]] -->
<td><xsl:value-of select="concat(position(),'.')"/></td>
<!-- [[[ HERE WE GET THE REST OF THE COLUMN DATA ]]] -->
<xsl:apply-templates select="Element" mode="PRINTER_FRIENDLY">
<xsl:with-param name="position"><xsl:value-of
select="position()"/></xsl:with-param>
</xsl:apply-templates>
</tr>
</xsl:if>
</xsl:for-each>
Is there a work-around, or another way to accomplish an
incrementing number
for the TD?
Karl
--+------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--