RE: [xsl] conditional declaretion of a variable

Subject: RE: [xsl] conditional declaretion of a variable
From: "Martinez, Brian" <brian.martinez@xxxxxxxxxxx>
Date: Thu, 17 Apr 2003 10:24:06 -0600
> From: florian [mailto:csshsh@xxxxxxxxxxxxxxx]
> Sent: Thursday, April 17, 2003 5:46 AM
> Subject: [xsl] conditional declaretion of a variable
> 
> hi!
> 
> im wondering why something like this doesnt work:
> 
> <xsl:variable name="field" select="@field" />
> 
> <xsl:choose>
>   <xsl:when test="@valueField">
>     <xsl:variable name="valueField" select="@valueField" />
>   </xsl:when>
>   <xsl:otherwise>
>     <xsl:variable name="valueField" select="@field" />
>   </xsl:otherwise>
> </xsl:choose>
> 
> <xsl:value-of select="$field" />

The scope of an xsl:variable binding is its immediate parent element.  So
when you declare a variable inside an xsl:when (or xsl:if or xsl:for-each,
etc.), the variable no longer exists once you exit the block where it's
declared.  What you want is:

<xsl:variable name="valueField">
  <xsl:choose>
    <xsl:when test="@valueField">
      <xsl:value-of select="@valueField"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="@field"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:variable>

This is a bit cumbersome (although easier to read), and creates the variable
as an RTF, but another post in the thread gives a more efficient solution.

hth,
b.

| 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   http://www.cheaptickets.com/ |

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


Current Thread