[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] priority of key patterns

Subject: Re: [xsl] priority of key patterns
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Wed, 14 Nov 2012 10:33:01 +0000

Also top tip regarding this:
<xsl:apply-templates select="node()|@*"/>
What the union operator | does is de-dupe and sort the nodes into
document order, so by doing "node() | @*" you are giving the processor
more work than "@* | node()" because all the attributes nodes have to
be moved in the sort before the node()s.

If you are using xslt 2.0, then you should use "@*, node()"  (comma
instead of pipe) which returns the nodes exactly the way you specify,
without the de-dupe or sort.

I think Saxon now does this optimization automatically - but I'm not sure which version it comes out in, it might be something that's yet to be released.

In fact it's not a very big win anyway: Saxon for years has been able to spot that both operands to "|" are sorted node-sets, in which case it does a merge with no sort, which isn't going to take that much longer than simply concatenating the two sequences, assuming you are using the TinyTree where node order comparisons are highly efficient.

Michael Kay

Current Thread