Re: [xsl] ancestor::* and for-each

Subject: Re: [xsl] ancestor::* and for-each
From: David Carlisle <davidc@xxxxxxxxx>
Date: Wed, 28 Jul 2010 17:27:19 +0100
On 28/07/2010 17:11, Wolfgang Laun wrote:
I use ancestor-or-self::* to obtain the node sequence from some node
to the document root.
The outermost/top element of the document isn't interesting, so I add
a predicate, and I find that this works:
    [position() != last()]
Apparently, the sequence goes from leaf to root, which is the closing
tag order, as it should be.

The sequence returned by a path expression is always in document order so (ancestor-or-self::*)[position()!=1]

would return the elements you want.

However the predicates that appear within a step are not filtering the entire sequence returned they are a separate syntactic construct, and they number in the direction of the axis used. which is backwards for ancestor-or-self so, as you observe

ancestor-or-self::*[position() != last()]

selects the same elements.


[] in a step is a predicate http://www.w3.org/TR/xpath20/#id-predicates

[] applied to a sequence is a filter
http://www.w3.org/TR/xpath20/#id-filter-expr

David

________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs. ________________________________________________________________________


Current Thread