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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--