xsl-list
[Top] [All Lists]

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

2007-08-13 07:55:18
On 8/13/07, Angela Williams 
<Angela(_dot_)Williams(_at_)the401kcompany(_dot_)com> 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

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