I'm still a bit perplexed. If you evaluate a nodeset in a
string context then only the first node in the nodeset is
considered. That's why
following-sibling::div[(_at_)class = 'slide']/@id is the same as
following-sibling::div[(_at_)class = 'slide'][1]/@id.
On the other hand,
preceding-sibling::div[(_at_)class = 'slide']/@id is the same as
preceding-sibling::div[(_at_)class = 'slide'][last()]/@id.
So it seems as if the reversed axis doesn't come into play -
of the entire nodeset, only the first is considered, but it's
the first in *document order*. Why?
A positional predicate in a step of a path expression considers the
nodes in axis order: so for a reverse axis, [1] selects the last node in
document order.
XSLT always processes node-sets in document order, and the conversion of
a node-set to a string always uses the node that is first in document
order; the axis that was used to select the nodes is irrelevant.
Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list