Subject: RE: [xsl] No Duplicate Contain() is Allowed? From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Mon, 17 Dec 2007 09:39:38 -0000 |
Read the spec for the contains() function - it doesn't do what you think. You have guessed wrongly that it takes as input a set of nodes and returns true if any of those nodes is equal to the second argument. What it actually does is to take a single string as input and return true if that string contains a specified substring. Also, read the error message. It tells you very explicitly what you have done wrong: contains requires a single item as the value of the first argument, and you have supplied a sequence of values. If your XML had been ill-formed, the message would have been completely different. If you want to test whether any topic is equal to XML, use <xsl:if test="//topic[. = 'XML']"/>. If you want to test whether any topic has "XML" as a substring, use <xsl:if test="//topic[contains(., 'XML')"/>. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Alice Wei [mailto:ajwei@xxxxxxxxxxx] > Sent: 17 December 2007 03:38 > To: xsl-list > Subject: [xsl] No Duplicate Contain() is Allowed? > > Dear all: > > For those of you who may know something about SQL or > XQuery might be able to help me out. > > XML: > <bookshelf> > <book>XSLT 2.0: From Beginning to Professional > <topic>XML</topic> > <publisher>Wiley</publisher></book> > <book>XML in a Nutshell > <publisher>Oreilly</publisher</book> > <book>XSLT 2.0: Programmer's Reference > <topic>XML</topic> > <publisher>Wrox</publisher> > </book> > </bookshelf> > > XSLT: > > <xsl:template match="bookshelf"> > > <xsl:if test="contains(//book/*, 'XML')"> > <xsl:apply-templates/> > </xsl:if> > <xsl:if test="contains(//topic/*, 'XML')"> > <xsl:apply-templates/> > </xsl:if> > </xsl:template> > > > What happened is really weird. If I had commented out the 2nd > <xsl:if> statement, it brings back one line without error. > When I got to the 2nd one, it tells me this error: > Description: A sequence of more than one item is not allowed > as the first argument of contains() ("", "", ...) > > My document is obviously well-formed, can anyone please give > me some suggestions on how to get rid of this error? > > Thanks to those who can help. > > Alice > > > Alice Wei > MIS 2008 > School of Library and Information Science Indiana University > Bloomington
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] No Duplicate Contain() is, Jesper Tverskov | Thread | Re: [xsl] No Duplicate Contain() is, G. Ken Holman |
Re: [xsl] ANN: 'Testing XSLT' train, Andrew Welch | Date | RE: [xsl] Identity transformation f, Michael Kay |
Month |