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>
--~--