Subject: Re: [xsl] 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 |
>>>>> "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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] XSLT2: A sequence of more tha, Xiaocun Xu | Thread | Re: [xsl] XSLT2: A sequence of more, Xiaocun Xu |
[xsl] XSLT2: A sequence of more tha, Xiaocun Xu | Date | [xsl] First UnderstandingSaxon.NET , M. David Peterson |
Month |