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

Subject: Re: [xsl] ancestor::* and for-each
From: Martin Honnen <Martin.Honnen@xxxxxx>
Date: Wed, 28 Jul 2010 18:36:26 +0200
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.

Then, I iterate over the sequence, and now the nodes are processed
from root to leaf, which is strange.

It has nothing to do with iteration/for-each I think, XPath 2.0 when defining a step in a path expression that returns a sequence of nodes says the following:
"If every evaluation of E2 returns a (possibly empty) sequence of nodes, these sequences are combined, and duplicate nodes are eliminated based on node identity. The resulting node sequence is returned in document order."


Thus if you have
E1/ancestor::*
ancestor::* returns a sequence of nodes but for the result of the expression duplicates are eliminated and nodes are ordered in document order.







--


	Martin Honnen
	http://msmvps.com/blogs/martin_honnen/

Current Thread