I wrote -
In other cases, the fact that the context is a single node (in
for-each) vs. a node-set (in apply-templates and call-templates) can
make quite a difference.
Well, that was a little too simplified, I think - it ended up a bit
incorrect. The context node is always a single node, but
apply-templates operates on an entire node-set (which might happen to
contain one node or many - or none). The results get assembled into the
right order but may or may not have been processed in that order. The
context node for call-templates is the same one as from where it was
For-each does operate on each node in a node-set, but they are operated
on separately, as if they were single, unrelated nodes. With for-each,
for example, you can only get a position() of 1 on any one iteration,
whereas with apply-templates, position() can give other values (you
might be processing node #3 in a set of nodes).
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list