[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] following-sibling is evil
Subject: Re: [xsl] following-sibling is evil From: "Andrew Welch andrew.j.welch@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Sun, 6 Jul 2014 10:33:27 -0000 |
Use a key, and count how many entries there are in the key with that value combo. On 6 Jul 2014 10:33, "Costello, Roger L. costello@xxxxxxxxx" < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Hi Folks, > > I have a list of <Book> elements. Each Book contains Title, Author, and Genre. > > For each Book I wish to determine if there is a following Book with the same Author and Genre. > > I am using Schematron. This XSLT is generated from my Schematron rule: > > <xsl:template match="Book"> > <xsl:variable name="currentAuthor" select="Author" /> > <xsl:variable name="currentGenre" select="Genre" /> > <xsl:if test="following-sibling::Book[Title eq $currentAuthor][Genre eq $currentGenre][1]"> > <xsl:text>There is another Book with the same Author and Genre</xsl:text> > </xsl:if> > </xsl:template> > > Notice the XPath expression: > > following-sibling::Book[Title eq $currentAuthor][Genre eq $currentGenre][1] > > As I understand it, an XPath processor will evaluate that XPath expression like so: > > Step 1. Gather up all the following sibling Book elements. Let's denote the resulting set by S1. > > Step 2. Filter S1 by eliminating those Books that don't satisfy this predicate: [Title eq $currentAuthor]. Let's denote the resulting set by S2. > > Step 3. Filter S2 by eliminating those Books that don't satisfy this predicate: [Genre eq $currentGenre]. Let's denote the resulting set by S3. > > Step 4. Filter S3 by eliminating all Books except the first. > > Do I correctly understand how an XPath processor will evaluate the XPath expression? > > Suppose the list contains 100,000 Books. > > Consider evaluating the XPath expression for the first Book in the list. The XPath processor must collect 99,999 Books and apply the steps to them. > > For the second Book the XPath processor must collect 99,998 Books and apply the steps to them. > > For the third Book the XPath processor must collect 99,997 Books and apply the steps to them. > > And so forth. > > Yikes! > > That XSLT program will take a very long time to execute! > > Is there a way to modify my XPath so that the XPath processor stops as soon as it gets to a Book that matches all the predicates? > > /Roger
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] following-sibling is evil, Tony Graham tgraham@ | Thread | Re: [xsl] following-sibling is evil, Syd Bauman s.bauman@ |
Re: [xsl] following-sibling is evil, Michael Kay mike@xxx | Date | Re: [xsl] following-sibling is evil, Syd Bauman s.bauman@ |
Month |