Subject: Re: [xsl] Seek XPath 2.0 expression for this: Are there any book titles with more than one binding? From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 2 May 2019 15:07:49 -0000 |
You're using "=" rather than "is" to compare books. That's a dangerous mistake to make (a) because it gives you the right answer 99% of the time, and (b) because it's incredibly expensive. I couldn't think of a better approach with XPath 2.0. As Martin says, it's the wrong tool for the job. Michael Kay Saxonica > On 2 May 2019, at 13:55, Costello, Roger L. costello@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Hello XPath experts! > > At the bottom of this message is my XML document. I need an XPath 2.0 expression that returns the result of this query: > > Are there any book titles with more than > one binding? If yes, then show the first book > for each binding. > > For the below XML document, the query should return these two books: > > <Book> > <Author>Sally Smith</Author> > <Title>XYZ</Title> > <Binding>hardcover</Binding> > <Count>1</Count> > <Description>lo lo lo ..</Description> > </Book> > <Book> > <Author>Sally Smith</Author> > <Title>XYZ</Title> > <Binding>softcover</Binding> > <Count>1</Count> > <Description>do do do ..</Description> > </Book> > > Notice that the two books have the same author and title but different binding (hardcover versus softcover). > > This XPath 2.0 expression seems to work: > > for $i in /Bookstore/BookTitle/Book[1], > $j in /Bookstore/BookTitle/Book[1] return > if (($i ne $j) > and ($i/Author eq $j/Author) > and ($i/Title eq $j/Title) > and ($i/Binding ne $j/Binding) > and ($i = $j/preceding::Book)) > then ($i, $j) > else () > > That expression seems awfully complicated. Is there a simpler expression? If there isn't a simpler expression, then do you see anything missing in the expression (i.e., something that the expression doesn't take into consideration)? /Roger > > <Bookstore> > <BookTitle> > <Book> > <Author>John Doe</Author> > <Title>ABC</Title> > <Binding>hardcover</Binding> > <Count>1</Count> > <Description>da da da ..</Description> > </Book> > <Book> > <Author>John Doe</Author> > <Title>ABC</Title> > <Binding>hardcover</Binding> > <Count>2</Count> > <Description>za za za ..</Description> > </Book> > </BookTitle> > <BookTitle> > <Book> > <Author>John Doe</Author> > <Title>Foo</Title> > <Binding>softcover</Binding> > <Count>1</Count> > <Description>na na na ..</Description> > </Book> > </BookTitle> > <BookTitle> > <Book> > <Author>Sally Smith</Author> > <Title>XYZ</Title> > <Binding>hardcover</Binding> > <Count>1</Count> > <Description>lo lo lo ..</Description> > </Book> > <Book> > <Author>Sally Smith</Author> > <Title>XYZ</Title> > <Binding>hardcover</Binding> > <Count>2</Count> > <Description>ho ho ho ..</Description> > </Book> > </BookTitle> > <BookTitle> > <Book> > <Author>Sally Smith</Author> > <Title>XYZ</Title> > <Binding>softcover</Binding> > <Count>1</Count> > <Description>do do do ..</Description> > </Book> > </BookTitle> > </Bookstore>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Seek XPath 2.0 expression, Martin Honnen martin | Thread | Re: [xsl] Seek XPath 2.0 expression, Dimitre Novatchev dn |
Re: [xsl] Seek XPath 2.0 expression, Martin Honnen martin | Date | Re: [xsl] Seek XPath 2.0 expression, Dimitre Novatchev dn |
Month |