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