Re: [xsl] format-number() issue

Subject: Re: [xsl] format-number() issue
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Fri, 16 Aug 2013 20:59:35 +0100
To convert a string to a number, you need to do an explicit conversion.

The result of lower-case() and of substring() is a string, which cannot be
implicitly converted to a number.

Implicit conversion works if you supply an untyped node, but not if you supply
a string.

Michael Kay
Saxonica

On 16 Aug 2013, at 15:11, Nathan Tallman wrote:

> I'm trying to use format-number like this:
>
> <xsl:variable name="unitid" select="lower-case(/ead/archdesc/did/unitid)"/>
> <xsl:variable name="number" select="substring($unitid, 3)" />
> <xsl:value-of select="format-number($number, '0000')"/>
>
> I've seen many examples online of using a variable in the first spot
> with format-number, but I keep getting a validation error, "Required
> item type of first argument of format-number() is numeric; supplied
> value has item type xs:string."
>
> I've tried sticking as="xs:integer" in <xsl:variable  name="number">
> and adding the xs namespace, but then I get this error, "Required item
> type of value of variable $number is xs:integer; supplied value has
> item type xs:string". I can't make $unitid an integer, as it has alpha
> characters in it (which I remove in $number).
>
> Can someone point out my errors or give me a hint?
>
> Thanks,
> Nathan

Current Thread