RE: [xsl] xsl:if

Subject: RE: [xsl] xsl:if
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 27 Sep 2004 09:18:25 +0100
You are declaring two different variables with the same name. The second
variable goes out of scope as soon as you exit the xsl:if instruction. So
all subsequent references are to the first variable.

XSLT 1.0 makes your construct illegal, but some XSLT 1.0 processors (notably
Xalan, IIRC) allow it. Unfortunately, the construct has been made legal in
XSLT 2.0. Saxon should give you a warning that the second variable
declaration is pointless, because it can never be referred to.

The way to do this (in 1.0) is

<xsl:variable name="currencyTmp">
  <xsl:choose>
    <xsl:when test="exp1 = ''">
      <xsl:value-of select="exp2"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="exp1"/>
    </
  </
</

In 2.0 it's easier:

<xsl:variable name="currencyTmp"
  select="if (exp1 = '') then exp2 else exp1"/>

Michael Kay
http://www.saxonica.com/ 

> -----Original Message-----
> From: Andreas Andersson [mailto:andreas@xxxxxxxxxxxxxx] 
> Sent: 27 September 2004 08:38
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] xsl:if
> 
> Hi!
> 
> I'm trying to test if a variable is the empty string or not, I can't 
> find out how to do it with xsl:if. Here is what I have:
> 
> <xsl:variable name="currencyTmp" select="select_value_in_some_cell"/>
> <xsl:if test="$currencyTmp=''">
> 	<xsl:variable name="currencyTmp" 
> select="select_value_in_some_other_cell"/>
> </xsl:if>
> 
> I know that my selects work, but the ifs doesn't?
> 
> Anyone know what I'm doing wrong?
> 
> Thanks.
> 
> -- 
> Andreas Andersson
> IT Dept.
> Travelstart Nordic
> andreas@xxxxxxxxxxxxxx
> http://www.travelstart.se

Current Thread