Re: [xsl] Why does my XSLT produce a Warning message with never-executed code that divides a blank by 10?

Subject: Re: [xsl] Why does my XSLT produce a Warning message with never-executed code that divides a blank by 10?
From: "Imsieke, Gerrit, le-tex gerrit.imsieke@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sun, 31 Mar 2024 08:19:34 -0000
Hi Roger,

I don't know why Saxon doesn't determine that the xs:integer() branch will only be reached when normalize-space($test) has a length > 0.

Interestingly, there is no warning (only a dynamic error when executing) for

$test ! xs:integer(.) div 10

Maybe generate the following expression, it won't cause a warning either, and it will give the same result as your code (with an additional check that $test is actually castable as xs:integer):

$test[. castable as xs:integer] ! xs:integer(.) div 10

or for XPath 2.0

for $t in $test[. castable as xs:integer] return xs:integer($t) div 10

Gerrit


On 31.03.2024 09:56, Roger L Costello costello@xxxxxxxxx wrote:
Hi Folks,

I have a program that generates this XSLT code:

<xsl:template match="/">
         <xsl:variable name="test" select="'    '" as="xs:string"/>
         <xsl:value-of select="
             if (normalize-space($test) eq '') then ()
             else xs:integer($test) div 10"/>
</xsl:template>

When I execute that XSLT code, I get this warning message:

Warning: SXWN9000 Evaluation will always throw a dynamic error: Cannot convert zero-length string to an integer

Why am I getting that Warning message? This:
xs:integer($test) div 10


will never be executed because of this:

if (normalize-space($test) eq '') then ()

So I don't understand why I am getting the Warning message.

How can the XSLT code be written so that, when executed, it doesn't produce a Warning message? Note: recall that I have a program that generates the XSLT code. Sometimes the program generates $test with a blank value, other times the program generates $test with a numeric value. The generated XSLT code needs to work with both cases.

/Roger




-- Gerrit Imsieke GeschC$ftsfC<hrer / Managing Director le-tex publishing services GmbH Weissenfelser Str. 84, 04229 Leipzig, Germany Phone +49 341 355356 110, Fax +49 341 355356 510 gerrit.imsieke@xxxxxxxxx, http://www.le-tex.de

Registergericht / Commercial Register: Amtsgericht Leipzig
Registernummer / Registration Number: HRB 24930

GeschC$ftsfC<hrer / Managing Directors:
Gerrit Imsieke, Svea Jelonek, Thomas Schmidt

Current Thread