[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: XSLT2: A sequence of more than one item is not al

Subject: Re: XSLT2: A sequence of more than one item is not allowed as the first argument of contains()
From: Colin Paul Adams <colin@xxxxxxxxxxxxxxxxxx>
Date: 25 Sep 2005 20:23:38 +0100
xslt2 contains
>>>>> "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

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.