Re: [xsl] Re: XSL Variable declaration

Subject: Re: [xsl] Re: XSL Variable declaration
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Mon, 14 Feb 2011 11:07:40 +0000
On 14/02/2011 10:48, Vasu Chakkera wrote:
    There is an interesting stylesheet I came across this morning where
some developer had declared two Xsl:variables one after the other with
the same name.
    <xsl:variable name = "foo">
   </xsl:variable>
  <xsl:variable name = "foo">
   </xsl:variable>
    Not sure why he did that, but to my surprise, it seems to be valid
in XSLT2 .. and as my expectations, it failed in XSLT1 saying two
variables cant have same name within the same scope..
   Is this right??

Yes, this is permitted in XSLT 2.0 but not 1.0 (I assume you are talking about local variables).


It can be quite a handy style of programming, so long as you recognize that each xsl:variable is a new variable:

<xsl:variable name="s" select="@something"/>
<xsl:variable name="s" select="substring-before($s, ':')"/>
<xsl:variable name="s" select="substring-after($s, '/')"/>
<xsl:variable name="s" select="concat('(', $s, ')')"/>
<xsl:value-of select="$s"/>

Saves (a) writing deeply nested XPath expressions, and (b) thinking up new variable names for intermediate results, or (c) changing variable names when an extra computation step is introduced.

But it might confuse some readers, so use with care.

Michael Kay
Saxonica

Current Thread