From: Dimitre Novatchev [mailto:dnovatchev(_at_)yahoo(_dot_)com]
Sent: Friday, February 14, 2003 8:13 AM
Subject: Re: [xsl] Reference to variable cannot be resolved.
Note that XSLT 2.0 (per the November 15 WD) changes this so that
shadowing a local variable is not an error, though it is
discouraged:
http://www.w3.org/TR/xslt20/#dt-shadows
This is really horrible.
Why should a language support a practice that must be discouraged?
The example given in the spec seems a bit misleading, because it really
illustrates the restrictions of scope and not the practice of shadowing.
The following is illegal in either spec:
<xsl:template match="/">
<xsl:variable name="x" select="1"/>
<xsl:variable name="x" select="$x+1"/>
<xsl:value-of select="$x"/>
</xsl:template>
But in XSLT 1.0, you can do the following, which isn't much different from
what 2.0 would allow, other than the initial binding is global instead of
local:
<xsl:variable name="x" select="1"/>
<xsl:template match="/">
<xsl:if test="$x = 1">
<xsl:variable name="x" select="$x + 1"/>
</xsl:if>
<result><xsl:value-of select="$x"/></result>
</xsl:template>
Obviously it's complete nonsense. Perhaps the prevailing attitude is that
implementations shouldn't have to prevent people from becoming victims of
their own bad code. ;-)
b.
| brian martinez
brian(_dot_)martinez(_at_)trip(_dot_)com |
| senior gui programmer 303.708.7248 |
| trip network, inc. fax 303.790.9350 |
| 6436 s. racine cir. englewood, co 80111 |
| http://www.cheaptickets.com/ http://www.trip.com/ |
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list