Re: <xsl:variable> behavior

Subject: Re: <xsl:variable> behavior
From: Phil Lanch <phil@xxxxxxxxxxxxxxx>
Date: Thu, 11 Nov 1999 12:19:01 +0000
"Clark C. Evans" wrote:
> 
> <xsl:template match="/">
>   <xsl:variable name="x">
>     <xsl:choose>
>       <xsl:when test="false()">X</xsl:when>
>     </xsl:choose>
>   </xsl:variable>
>   <xsl:if test="$x">x</xsl:if>
> </xsl:template>
> 
> This (unexpectedly) prints "x" using jclark's xt while

The value of the variable "is a result tree fragment equivalent to a
node-set containing just a single root node having as children the
sequence of nodes produced by instantiating the template" [11.2].

I.e. $x contains 1 node (which happens to be empty, because your
template produces no nodes), so it converts to true.

That one is a bit counter-intuitive, I think.

> <xsl:template match="/">
>   <xsl:variable name="x"></xsl:variable>
>   <xsl:if test="$x">x</xsl:if>
> </xsl:template>
> 
> Does not (as expected).

"If the variable-binding element has empty content and does not have a
select attribute, then the value of the variable is an empty string"
[11.2].

And an empty string converts to false.

-- 

cheers

phil


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


Current Thread