Subject: Re: [xsl] boolean(string(false())) is true - always? From: "Sewell, David R. (drs2n) dsewell@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 2 Mar 2017 15:27:00 -0000 |
The difference in return value between fn:boolean('false') and xs:boolean('false') must be in the top ten of XPath "gotcha's" -- I usually forget that despite having worked with XPath for more than a decade. David On Thu, 2 Mar 2017, Martin Honnen martin.honnen@xxxxxx wrote: > On 02.03.2017 16:00, Michael MC<ller-Hillebrand mmh@xxxxxxxxx wrote: > >> <xsl:function name="dy:isFoo" as="xs:boolean"> >> <xsl:param name="node" as="node()"/> >> <xsl:choose> >> <xsl:when test="$node[self::bar/@foo = 'x']"> >> <xsl:value-of select="true()"/> >> </xsl:when> >> <xsl:otherwise> >> <xsl:value-of select="false()"/> >> </xsl:otherwise> >> </xsl:choose> >> </xsl:function> >> >> and changed that to the more elegant: >> >> <xsl:function name="dy:isFoo" as="xs:boolean"> >> <xsl:param name="node" as="node()"/> >> <xsl:sequence select="exists($node[self::bar/@foo = 'x'])"/> >> </xsl:function> >> >> BUT then I looked at my old code and said to myself: This could never have >> worked?! >> >> Isn't xsl:value-of creating a text node, so in xsl:otherwise it creates >> 'false'. And if this is cast to boolean as the function requires, we should >> get true(), because the string is not empty? > > I think the rules lay out that the text node with 'true' or 'false' is > atomized to xs:untypedAtomic 'true' or 'false' and then the conversion to > xs:boolean is defined as a cast based on the XSD schema spec which treats > 'true' as the boolean value true and false as the boolean value false. So > what happens in language terms would be > 'true' cast as xs:boolean > which gives the boolean value true respectively > 'false' cast as xs:boolean > which gives the boolean value false and not > boolean('false') > which would give the boolean value true. > > > > -- David Sewell Manager of Digital Initiatives The University of Virginia Press Email: dsewell@xxxxxxxxxxxx Tel: +1 434 924 9973 Web: http://www.upress.virginia.edu/rotunda
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] boolean(string(false())) , Martin Honnen martin | Thread | Re: [xsl] boolean(string(false())) , Michael Müller-Hille |
Re: [xsl] boolean(string(false())) , Martin Honnen martin | Date | Re: [xsl] boolean(string(false())) , Michael Müller-Hille |
Month |