xsl-list
[Top] [All Lists]

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

2005-09-25 17:04:13
Ah, thanks for the explanation, that worked.

Much appreciated,
Xiaocun

--- Colin Paul Adams <colin(_at_)colina(_dot_)demon(_dot_)co(_dot_)uk> wrote:

"Xiaocun" == Xiaocun Xu <xiaocunxu(_at_)yahoo(_dot_)com>
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


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





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

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