Subject: [xsl] CORRECTION! (was Re: Assignment no, dynamic scoping si (was: Re: RE: Wishes for XSL revisions ...) From: "Evan Lenz" <elenz@xxxxxxxxxxx> Date: Wed, 2 Jan 2002 14:12:24 -0800 |
Doh! My general statement was correct, but my example was wrong. So, Wendell, sorry to mislead you, but your example in fact was wrong too! I wrote: > Unless a predicate is bound (without intervening parentheses) to > a node test, it is always evaluated with respect to a "forward" > axis (the XPath spec arbitrarily chooses the child axis). So far, so good. > ancestor-or-self::*[@source][last()] > > Your example features both kinds of predicates. Oops. No, *both* predicates in the above example are tightly bound to the node test (and thus the reverse axis), because the Step production is as follows: [4] Step ::= AxisSpecifier NodeTest Predicate* | AbbreviatedStep where the Step itself may have more than one predicate. So [last()] will select the last node in *reverse* document order (or first in document order), not the other way around! To get the intended result (getting the "closest" ancestor), you would either write: ancestor-or-self::*[@source][1] or (ancestor-or-self::*[@source])[last()] In this second example, the [last()] predicate is no longer tightly bound to the node test as part of the Step production; the parentheses render it as a predicate of the second kind--as part of the FilterExpr production: [20] FilterExpr ::= PrimaryExpr | FilterExpr Predicate And thus [last()] is applied to the result of the expression to the left with respect to document order, selecting the last node in document order. Multiple predicates in a reverse step with the last being positional--that has got to rank pretty highly on the confuse-the-experts list of XPath expressions. Evan XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Re: Assignment no, dynami, Evan Lenz | Thread | Re: [xsl] CORRECTION! (was Re: Assi, Wendell Piez |
Re: [xsl] Re: Re: Assignment no, dy, Gunther Schadow | Date | [xsl] Incompatibilities XPath 1.0 v, Jeni Tennison |
Month |