True, but in this case, x seems to be evaluated twice:
No, you have two different things called x, and each of them is
evaluated once.
<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 :)
If people don't understand that the same name can refer to different
objects depending on the context, then they shouldn't be programming.
Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list