Re: [xsl] Variable and parameter with same name and scope allowed in 2.0

Subject: Re: [xsl] Variable and parameter with same name and scope allowed in 2.0
From: David Carlisle <davidc@xxxxxxxxx>
Date: Tue, 2 May 2006 14:51:23 +0100
>   In some case,
> it's clearer than the 1.0 version, where it is an error to
> have two variables of the same name in the same template
> rule (even in different "scopes", for example outside and
> inside an xsl:if).

In XSLT1.0 you can have two variables with the same name in a single
template if they are in distinct scopes, it's just an error if those
scopes overlap. 
so

<xsl:variable name="x"/>
<xsl:if test="true()">
<xsl:variable name="x"/>
</xsl:if>

is an error but

<xsl:if test="true()">
<xsl:variable name="x"/>
</xsl:if>
<xsl:variable name="x"/>

is not.

When this rule was added to XSLT 1 (in quite a late draft of the spec)
it invalidated several of my stylesheets (where I'd used "n" or "x" for
all variables) but probably on balance it has caught more user errors
than it has created. (A good thing). I think it's gone in 2.0 as there
are more variable binding possibilities (eg XPath for expressions) and
so any variable shadowing rule would probably affect xpath (and
possibly xquery) as well as xslt.

David

________________________________________________________________________
This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________

Current Thread