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(), '. ', ., '
')"/>
"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