Dear David and XSL-List,
Mike points out this isn't about current(): it is a red herring. Nonetheless it
might help to keep in mind that while position() is an XPath expression,
current() is not. It is defined only by XSLT.
This is because its entire purpose is to refer from inside an XPath expression
- that is, from a processing context that has changed from the context at the
start of the path - back out to the calling context. XPath without XSLT has no
such context (by definition, it is provided), so it does not define this
function. Other languages embedding XPath offer other ways of dealing with this
issue. Mostly this is by providing for variable bindings to be made outside the
path, permitting us to reference back out to some context that way. Or simply
by not supporting relative XPaths from arbitrary locations, so the calling
context is always the document root.
Indeed, since we can bind variables in XSLT, as in XQuery, we don't (mostly)
need current() in XSLT either. Most always we could rewrite it (apologies for
smart keyboard making dumb syntax errors):
<xsl:variable name="letters" as="xs:string+" select="'a', 'b', 'c'"/>
<xsl:for-each select="$letters">
<xsl:variable name="current" select="."/>
<xsl:message select="position(), $current ! position()"/>
</xsl:for-each>
This might suggest why the expression "current() ! position()" behaves the way
it does. It is the same as "for $c in (.) return position()".
So position() is not different in XPath from XSLT. The difference is only where
the processing context is defined, which includes position along with a context
node (or item as here), context size (returned by last()) and variable bindings
in scope. Where the XPath is called, this context - it can be thought of as a
set of properties used to initialize the XPath evaluation - is defined by the
calling context in the XSLT. But deeper inside an XPath is a different matter,
since each step provides context(s) for the next one (changes focus). The
difference is not how position() works but whose position within which sequence
is being asked for.
Cheers, Wendell
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--