Re: [xsl] XSLT2: A sequence of more than one item is not allowed as the first argument of contains()

Subject: Re: [xsl] XSLT2: A sequence of more than one item is not allowed as the first argument of contains()
From: Xiaocun Xu <xiaocunxu@xxxxxxxxx>
Date: Sun, 25 Sep 2005 17:04:13 -0700 (PDT)
Ah, thanks for the explanation, that worked.

Much appreciated,
Xiaocun

--- Colin Paul Adams <colin@xxxxxxxxxxxxxxxxxx> wrote:

> >>>>> "Xiaocun" == Xiaocun Xu <xiaocunxu@xxxxxxxxx>
> writes:
> 
>     Xiaocun> Hi, I am having problem with contains()
> in XSLT2
>     Xiaocun> (Saxon8.5.1).  The following code is
> checking if the
>     Xiaocun> classname contains the word
> "notification":
>  
>     Xiaocun> <xsl:variable name="vKeyword"
> select="notification"/>
>     Xiaocun> <xsl:variable name="vClassName"
>     Xiaocun> select="Class/@classname"/> <xsl:if
>     Xiaocun> test="contains($vClassName,
> $vKeyword)"> <xsl:copy-of
>     Xiaocun> select="."/> </xsl:if>
> 
>     Xiaocun> XSLT2 using Saxon8.5.1 returns the
> following error:
>     Xiaocun> XPTY0004: A sequence of more than one
> item is not allowed
>     Xiaocun> as the first argument of contains()
> 
>     Xiaocun> Using XSLT 1, Saxon8.5.1 returns no
> error.
> 
> That's because in XPath 1.0 compatibility mode, only
> the first item in
> the sequence will be considered.
> 
>     Xiaocun> What does that error mean?
> 
> The error means that the expression Class/@classname
> contains more
> than one item. This would be the case if the context
> node has multiple
> Class children.
> 
>     Xiaocun> How do I check if an
>     Xiaocun> attribute contains a keyword in XSLT2?
> 
> Well, you could just change:
> 
> <xsl:variable name="vClassName"
> select="Class/@classname"/>
> 
> to
> 
> <xsl:variable name="vClassName"
> select="Class[1]/@classname"/>
> 
> and you will then get the same behaviour as XSLT
> 1.0.
> 
> But I suspect this isn't what you really want.
> Perhaps you want to
> check every item in Class/@classname, in which case
> you might want an
> xsl:for-each loop over select="Class" and call
>         contains(@classname, $vKeyword)
> from within the loop.
> -- 
> Colin Adams
> Preston Lancashire
> 
> 



		
__________________________________ 
Yahoo! Mail - PC Magazine Editors' Choice 2005 
http://mail.yahoo.com

Current Thread