Subject: RE: XSL: For-Each Efficient or Not?
From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx>
Date: Mon, 1 Jul 2002 20:11:26 +0100
|
> >
> > >m:apply[child::*[position()=1 and name()='factorof']]
> >
...
>
> In this case, however, the processor does have to look at
> every node since
> each node has to provide the context for the evaluation of the
> expression(s) in the predicate. I.e. how does it evaluate
> name()='factorof'
> without picking up the node whose name it's testing? It would
> be a pretty
> smart processor that had already thrown away all the nodes in
> the wrong
> position before it did that.
It's not that difficult. Saxon doesn't quite achieve this today but it
will in the next release (I just tested it).
X[position() = 1 and name()='factorof']
can be statically rewritten as
X[1][name()='factorof']
without too much difficulty. All you need to know is that the right-hand
operand of the "and" does not depend on current position (and you need
to be careful not to rewrite X[1 and 2] as X[1][2]).
Once you have done this rewrite, the standard (run-time) optimization
for X[1] is triggered, so you stop evaluating X after you've found the
first node that matches.
Michael Kay
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
- Re: XSL: For-Each Efficient or Not?, (continued)
- Wendell Piez - Mon, 1 Jul 2002 11:47:52 -0400 (EDT)
- bryan - Mon, 1 Jul 2002 12:08:49 -0400 (EDT)
- Johannes Döbler - Mon, 1 Jul 2002 12:57:29 -0400 (EDT)
- Wendell Piez - Mon, 1 Jul 2002 13:57:16 -0400 (EDT)
- Michael Kay - Mon, 1 Jul 2002 15:09:03 -0400 (EDT) <=
- Wendell Piez - Mon, 1 Jul 2002 17:49:48 -0400 (EDT)
- Michael Kay - Tue, 2 Jul 2002 04:11:16 -0400 (EDT)
- Kevin Jones - Mon, 1 Jul 2002 18:16:57 -0400 (EDT)
- Michael Kay - Tue, 2 Jul 2002 04:32:02 -0400 (EDT)
|
|