RE: [xsl] Scope of variables

Subject: RE: [xsl] Scope of variables
From: "Martinez, Brian" <brian.martinez@xxxxxxxxxxx>
Date: Thu, 8 May 2003 14:56:23 -0600
> From: Karl J. Stubsjoen [mailto:karl@xxxxxxxxxxxxx]
> Sent: Thursday, May 08, 2003 1:00 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Scope of variables
> I have 2 questions:
> 1)  If I define a variable at the top of a template rule and 
> then later try
> to update the value of this variable later down in the 
> template, I always
> get the error "Can't define variable twice...".  So how do 
> you reassign a
> value to a variable.

VFAQ #1.  You can't reassign a value to a variable once it is bound.  You
can, however, define a top-level variable in a stylesheet that is then
imported into another stylesheet, and then override its value (the rules of
precedence for imported modules apply).

> 2) About scope:  Within a for-each loop I have a choose.  In 
> the choose I
> have a single test and an otherwise.  The result of the 
> choose is setting
> the value of a variable.  Just below this choose logic I am 
> referencing the
> value but am getting the error "A reference to variable or parameter
> 'currentVAL' cannot be resolved".  Where did I lose scopE on 
> this variable
> (currentVAL)?

VFAQ #2.  Variables only exist within the scope of their containing element.
If you do:

<xsl:if test="$foo = 'true'">
  <xsl:variable name="bar" select="'false'"/>

then $bar never exists outside the xsl:if element, and can't be referenced
anywhere else in the stylesheet.  You want:

<xsl:variable name="bar">
    <xsl:when test="$foo = 'true'">false</xsl:when>


| brian martinez                           brian.martinez@xxxxxxxxxxx |
| lead gui programmer                                    303.708.7248 |
| cheap tickets, part of trip network                fax 303.790.9350 |
| 6436 s. racine cir.                             englewood, co 80111 |
| cendant travel distribution services |

 XSL-List info and archive:

Current Thread