Subject: Re: [xsl] Which is faster: count(/Document/A/B) eq 1 ... or ... /Document/A/(count(B) eq 1) ? From: Michel Hendriksen <michel.hendriksen@xxxxx> Date: Thu, 20 Sep 2012 16:48:24 +0200 |
So use the one that is most clear and that will make maintenance easier;-) On Thu, Sep 20, 2012 at 1:11 AM, Michael Kay <mike@xxxxxxxxxxxx> wrote: > Execution speed is a property of the XSLT implementation, not a property of > the language. You can't ask questions about performance without saying what > processor you are interested in. > > With a trivial source document like this, it is very unlikely that any > performance difference will be measurable. > > If there were a million B elements, some processors might (with either > expression) count all the elements and then ask whether a million is equal > to one. Other processors might (with either expression) stop at the second > element and realize that the count is not going to be equal to one. So > different processors might give very different performance from each other > (with either expression), varying by a factor of a million. > > But then, if you parsed the source document containing a million B elements, > it's likely that parsing the document would take a lot longer than counting > the elements, so the performance difference including parsing cost might not > be so big after all. > > If there were more than one A element, the two expressions would not be > equivalent, so asking whether one is faster than the other is irrelevant. > One of them will give the wrong answer. > > Assuming you know there will always be one A, I would think that the most > consistent performance across processors would be achieved by writing > not(Document/A/B[2]). Of course, there's still a possibility that a very > naive processor would construct a node-set containing all the nodes in > Document/A/B, and then select the second of these nodes. There are no limits > to human stupidity. > > Michael Kay > Saxonica > > On 19/09/2012 14:34, Costello, Roger L. wrote: >> >> Hi Folks, >> >> Consider this XML document: >> >> <Document> >> <A> >> <B>blah</B> >> </A> >> </Document> >> >> Here are two XPath expressions to test that there is exactly one <B> >> element in the <A> element (assume there is only one <A> element): >> >> 1. count(/Document/A/B) eq 1 >> >> 2. /Document/A/(count(B) eq 1) >> >> Which is faster? >> >> Is there an XPath expression, besides the ones listed, that is even better >> and faster? >> >> /Roger
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Which is faster: count(/D, Michael Kay | Thread | [xsl] [ANN] Classes on XML, Schemat, Tommie Usdin |
Re: Fwd: [xsl] curly braces, Ihe Onwuka | Date | Re: [xsl] position last and attribu, John P. McCaskey |
Month |