Subject: Re: [xsl] [Summary] Three ways to express in XPath that there are no duplicates in a list of items From: Wendell Piez <wapiez@xxxxxxxxxxxxxxx> Date: Fri, 2 Nov 2012 10:00:02 -0400 |
Hi, for $n in (count(distinct-values(Websites/*)) + 1) return empty(Websites/*[$n]) (Or in 3.0 using a let.) I know, it's bad. (But maybe in a good way?) Cheers, Wendell On Fri, Nov 2, 2012 at 9:30 AM, Michael Kay <mike@xxxxxxxxxxxx> wrote: > > On 02/11/2012 13:01, Dimitre Novatchev wrote: >>> >>> count(Websites/*) = count(distinct-values(Websites/*)) >> >> A more efficient version (for an XPath processor with weak optimizer) >> of this is: >> >> not(Websites/*[count(distinct-values(Websites/*))+1]) >> >> So, we only count up to: >> count(distinct-values(Websites/*))+1 >> >> and don't need to count all children of Websites and then compare them >> to the count of distinct values. > > That solution is wrong because the context for child::Websites is different > inside the predicate. > > In some circumstances it would work in the form > > not(//Websites/*[count(distinct-values(//Websites/*))+1]) > > > But that solution is more dependent on a smart optimizer than the original, > because a naive engine will reevaluate the predicate once for every node > selected; and the performance of an unoptimized implementation of the > original is still (almost) linear, whereas an unoptimized implementation of > the latter is quadratic. > > Michael Kay > Saxonica > -- Wendell Piez | http://www.wendellpiez.com XML | XSLT | electronic publishing Eat Your Vegetables _____oo_________o_o___ooooo____ooooooo_^
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] [Summary] Three ways to e, Michael Kay | Thread | Re: [xsl] [Summary] Three ways to e, Dimitre Novatchev |
Re: [xsl] hierarchic counting in fl, Norbert Heidbrink | Date | Re: [xsl] [Summary] Three ways to e, Dimitre Novatchev |
Month |