Subject: Re: [xsl] Confusion with the results of starts-with() and a non-string arg From: "Bridger Dyson-Smith bdysonsmith@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 12 Dec 2018 21:23:04 -0000 |
Michael - On Wed, Dec 12, 2018 at 4:20 PM Michael Kay mike@xxxxxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > true here means child::true, a reference to an element node. It's not the > boolean constant true(). Saxon will generally give you a warning about this. > > You don't have an element named true, therefore child::true returns an > empty sequence, and functions like starts-with treat an empty sequence the > same as an empty string. Every string starts with the empty string, so the > function returns true - or rather, true(). > > Perfect - the child::true -> empty sequence -> empty string is exactly the explanation that I needed. > Michael Kay > Saxonica > > Thanks! Bridger On 12 Dec 2018, at 21:10, Bridger Dyson-Smith bdysonsmith@xxxxxxxxx < > xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Hi all - > > In the process of trying to illustrate something for a coworker, I > stumbled across some behavior that has me Very Confused. I would expect the > starts-with function to return 'false' when the second argument is not a > string, but the opposite happens: it returns 'true'. > > Can someone please help me understand what's happening here? Is this a > sort of type casting, or something else? > > Thank you in advance. > Best, > Bridger > > source.xml > ``` > <?xml version="1.0" encoding="UTF-8"?> > <test> > <my-string>This Is My String</my-string> > </test> > ``` > > test.xsl > ``` > <?xml version="1.0" encoding="UTF-8"?> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > exclude-result-prefixes="xs" > version="2.0"> > > <xsl:output method="xml" indent="yes" encoding="UTF-8"/> > <xsl:template match="@*|node()"> > <xsl:copy> > <xsl:apply-templates select="@*|node()"/> > </xsl:copy> > </xsl:template> > > <xsl:template match="my-string"> > <xsl:if test="starts-with(.,true)"> > <my-string-true> > <xsl:value-of select="starts-with(.,true)"/> > <xsl:text>###</xsl:text> > <xsl:value-of select="starts-with(.,'no')"/> > </my-string-true> > </xsl:if> > </xsl:template> > </xsl:stylesheet> > ``` > XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by > email) > > > XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/1230532> (by > email <>)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Confusion with the result, Michael Kay mike@xxx | Thread | [xsl] Efficient XPath 2.0 expressio, Costello, Roger L. c |
Re: [xsl] Confusion with the result, Michael Kay mike@xxx | Date | [xsl] Efficient XPath 2.0 expressio, Costello, Roger L. c |
Month |