
At 2013-01-05 13:39 -0500, Mark Baker wrote:
position() is being re-evaluated *inside* the predicate, whereas $pos is not being re-evaluated inside the predicate.
Fascinating. Unexpected, but entirely logical.
You can expect this any time you create a new context list, as evaluating position() reflects the current item in that new context list. In an XPath expression, the node test in the expression sets the context list to those nodes in the direction of the axis. The context list has just changed to those nodes, with each of those nodes becoming the current item in turn. So when the predicate is evaluated, position() is calculated for the item based on the context list of the nodes of the node test. The previous context list was pushed on a stack and is unavailable to position() in the predicate. The previous context list is restored from that stack when the XPath expression is finished being evaluated. Every time you write position() you have to think of what is the context list at this point. It changes often. Check out pages 108-109 and 125 of my XSLT/XPath book (14th edition). The complete book is available for "try and buy" preview at: http://www.CraneSoftwrights.com/training/#ptux For those readers who have subscribed to my 24-hour online video, see lecture 17 (this lecture is not one of the free 5 hours of lectures): http://www.CraneSoftwrights.com/links/udemy-ptux-online.htm . . . . . . . . Ken -- Contact us for world-wide XML consulting and instructor-led training Free 5-hour lecture: http://www.CraneSoftwrights.com/links/udemy.htm Crane Softwrights Ltd. http://www.CraneSoftwrights.com/z/ G. Ken Holman mailto:gkholman@CraneSoftwrights.com Google+ profile: https://plus.google.com/116832879756988317389/about Legal business disclaimers: http://www.CraneSoftwrights.com/legal