xsl-list
[Top] [All Lists]

RE: XSLT 2.0 empty string

2005-02-28 07:00:53
There's actually nothing specific to XSLT 2.0 here: these are all 1.0
expressions where 2.0 gives the same result as 1.0

As with XPath 1.0, when you compare a set of things to a single thing, the
result is true if there is at least one match. This is true whichever
operator you use. This means that if the set of things is empty, the result
of the comparison is false, whether the operator is "=", "!=", or anything
else.

So if $f is an empty sequence and $s is a string, 

  $f = $s is always false
  $f != $s is always false

You can test whether a sequence is empty using the function empty($f).

The result of string($f) when $f is an empty sequence is the zero-length
string, "". 

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

-----Original Message-----
From: Andrew Welch [mailto:ajwelch(_at_)piper-group(_dot_)com] 
Sent: 28 February 2005 12:14
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] XSLT 2.0 empty string


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

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



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