RE: [xsl] Coding aroung a "Cannot convert zero-length string to an integer" error

Subject: RE: [xsl] Coding aroung a "Cannot convert zero-length string to an integer" error
From: "Angela Williams" <Angela.Williams@xxxxxxxxxxxxxxxxxx>
Date: Mon, 13 Aug 2007 09:57:44 -0500
That's my case exactly.  Thanks for the clarification.


Thanks!
Angela

-----Original Message-----
From: Andrew Welch [mailto:andrew.j.welch@xxxxxxxxx]
Sent: Monday, August 13, 2007 9:55 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Coding aroung a "Cannot convert zero-length string to
an integer" error

On 8/13/07, Angela Williams <Angela.Williams@xxxxxxxxxxxxxxxxxx> wrote:
> I've found problems with using the not($stringIsEmpty) construct where

> I get a false true result, I suspect due to the presence of a node-set

> that is empty as opposed to an empty string.

That's probably because you haven't typed your parameters - if you pass
<foo> to a function that expects a string then <foo> gets converted into
a string, which is the same as not(xs:string(foo)).

If you pass <foo> to a function whose parameter is untyped the you have
not(foo) which is false for <foo/>

So basically always type your parameters - if you're expecting a string
that can be empty then you want:

<xsl:param name="foo" as="xs:string?"/>

...and then using test="not($foo)" should be fine.



> I've found if (not(string-length($input-date) eq 0 ) to be much more
> reliable, if more verbose.  I'm using Saxon 8.9 and XSLT 2.0.
>
> Are there other considerations for choosing one solution vs. the
other?

Apart from not needing to do it,  Mike Kay has suggested that
string-length is relatively expensive because of the need to sort out
surrogate pairs before counting characters.

cheers
andrew
--
http://andrewjwelch.com

Current Thread