<xsl:variable name="foo" as="xs:string">
<xsl:text/>abc<xsl:value-of select="'def'"/> </xsl:variable>
<xsl:value-of select="$foo"/>
Gives the error message: "A sequence of more than one item is not
allowed as the value of item $foo"
This is because variable $foo contains two strings,
beware of the difference between a text node and a string.
The content of your variable constructs a sequence of two
text nodes. It then tries to cast these to a string as that's
what you specified in the as attribute and that fails.
This would work:
<xsl:variable name="foo" as="xs:string">
<xsl:value-of>abc<xsl:value-of
select="'def'"/></xsl:value-of> </xsl:variable>
Ahh ok, I will have to read up on <xsl:value-of/> - the only place I've
seen this before is wd-xsl, looks odd now.
[snip]
Is it really the case that we will have to be very aware of
how many
items we are creating
Welcome to the wonderful world of strict type checking:-)
Often as not the only reason for using an as attribute is to
generate an error on code that would otherwise work as you
want to trap user-errors earlier rather than rely on implicit
conversions. So if you say as="xs:string" you are saying that
you want exactly one string, so if you give it a sequence of
two things you error. This is either a good thing or a bad
thing, depending on whether, at heart, you are a lisp
programmer or a pascal one:-)
The goal of specifying as="xs:string" is to prevent the unnecessary
contruction of a document node. I'm trying to remove all implicit type
conversions and keep the types as restrictive as possible, mainly
because it's good practice but also for the performance benefits.
I think because it's type
--~------------------------------------------------------------------
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>
--~--