Re: [xsl] What is the best way to cast integer to string in XSLT2?

Subject: Re: [xsl] What is the best way to cast integer to string in XSLT2?
From: Andrew Watt <andrew@xxxxxxxxxxxxxx>
Date: Sun, 11 May 2003 12:37:49 +0100
At 13:06 11/05/2003 +0200, you wrote:
Hi Mike and Jeni,

With Saxon 7.5 I'm getting an error on the following:

<xsl:value-of select="concat(position(), '. ', ., '&#xA;')"/>

"Type error in first argument of call to concat():
  Required type is xs:string; supplied value has type xs:integer"

1. Why doesn't the XSLT processor perform an implicit cast from integer to
string? This is quite natural, as any atomic type has a string
representation and can be converted to string.

Hi Dimitre,


Here is my interpretation.

The position() functions returns an xsd:integer, as the error message indicates. The concat() function takes only xsd:string arguments. Since the first argument you are supplying to concat() is not an xsd:string a type mismatch occurs and you get the error message that you report.

Why wasn't it automatically cast to xsd:string? Automatic casting in XSLT 2.0 / XPath 2.0, as I understand it, will only take place when the data is untyped. For example, if you supplied as an argument to concat() untyped data such as the content of <someElement>Blah blah</someElement> the content would be treated internally as xdt:anyAtomicType. The XSLT processor *would* automatically cast xdt:anyAtomicType to xsd:string if you supply that to concat() as an argument, but won't (without explicitly being told) cast an xsd:integer to an xsd:string.


2. My current solution is to use

string(position())


Is this the best/recommended solution?

It's what I would do.


I hope that helps.

Andrew Watt



XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list


Current Thread