xsl-list
[Top] [All Lists]

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

2005-06-01 04:10:53

<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>
--~--