Re: [xsl] Reference to variable cannot be resolved.

Subject: Re: [xsl] Reference to variable cannot be resolved.
From: Mike Brown <mike@xxxxxxxx>
Date: Thu, 13 Feb 2003 17:40:30 -0700 (MST)
Michael Kay wrote:
> > The 
> > few programming classes I've taken (using procedural 
> > languages) have taught that a lot of global variables are a 
> > Bad Thing, but maybe that axiom doesn't necessarily apply to XSLT.
> > 
> 
> Global variables are a bad thing in procedural programming because they
> can be updated from anywhere, which leads to a lot of errors.
> 
> They do no harm in XSLT because they are only evaluated once.

True, but in this case, x seems to be evaluated twice:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  <xsl:variable name="x" select="'hello'"/>
  <xsl:template match="/">
    <result>
      <r><xsl:value-of select="$x"/></r> <!-- $x is 'hello' here -->
      <xsl:variable name="x" select="'hi'"/>
      <r><xsl:value-of select="$x"/></r> <!-- $x is 'hi' here -->
      <xsl:call-template name="test"/>
    </result>
  </xsl:template>
  <xsl:template name="test">
    <r><xsl:value-of select="$x"/></r> <!-- $x is 'hello' here -->
  </xsl:template>
</xsl:stylesheet>

Explaining to people why that's legal, after telling them they can only
assign x once, is a nice challenge :)

Mike

-- 
  Mike J. Brown   |  http://skew.org/~mike/resume/
  Denver, CO, USA |  http://skew.org/xml/

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


Current Thread