RE: [xsl] A sequence of more than one item is not allowed as the value of item

Subject: RE: [xsl] A sequence of more than one item is not allowed as the value of item
From: "Andrew Welch" <ajwelch@xxxxxxxxxxxxxxx>
Date: Wed, 1 Jun 2005 12:10:53 +0100
> > <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

Current Thread