[xsl] XSLT 2.0 empty string

Subject: [xsl] XSLT 2.0 empty string
From: "Andrew Welch" <ajwelch@xxxxxxxxxxxxxxx>
Date: Mon, 28 Feb 2005 12:14:17 -0000
Consider the following code:

<xsl:variable name="foo" select="nothing" as="xs:string?"/>

<xsl:choose>
	<xsl:when test="$foo != ''">A</xsl:when>
	<xsl:when test="$foo = ''">B</xsl:when>
	<xsl:when test="not($foo != '')">C</xsl:when>
</xsl:choose>

When there isn't a <nothing> element, the output is C.  That is:

$foo != '' is false

and

$foo = '' also is false

Which is strange.  If I do "$foo is empty" then Saxon tells me $foo is a
string and not a nodeset.  After adding the explicit cast, the test
passes:

string($foo) = ''

Which suggests that $foo isn't a string (so which is it?).  It almost as
if the empty nodeset doesn't get implicitly cast like a 'populated'
nodeset, and the as: attribute is ignored.  Is there a difference
between the way the two are handled?

Also, is using "!= ''" a bad way of checking if the variable has content
when the variable type is 'xs:string?' (ie optional)?

thanks
andrew

Current Thread