xsl-list
[Top] [All Lists]

RE: Scope of variables

2003-05-08 12:29:49
(Sorry, accidentally sent my reply too soon, so it was incomplete )

[Karl J. Stubsjoen]

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.


Karl, **Google is your friend** - the first hit for "xslt faq variable
scope" returned a good link : 

http://www.xml.com/pub/a/2002/06/26/q-a.html

You cannot change the value of an xslt variable once it has been
assigned.  You have to get the results you want some other way, and
there are other ways.  One way is to pass parameters to templates.  Each
time the template gets invoked, it gets passed a new value in the
parameter.

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)?

The scope of the variable is the enclosing block, which in this case are
"when" or "otherwise" blocks.  This question comes up all the time on
the list.  Just check the FAQs and pay attention to some of the other
threads.  Outside its scope the variable is not available.

In this case, where you do not actually need a node set but only a
string, you can just put the choose inside the variable definition -

<xsl:variable name='x'>
<xsl:choose>
   <xsl:when>
...
</xsl:choose>
</xsl:variable>

Cheers,

Tom P


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



<Prev in Thread] Current Thread [Next in Thread>