<xsl:key name="x" match="node()"
use="generate-id((..|preceding-sibling::div1|preceding-sibling::div2|preceding-sibling::div3)[last()])"/>
can only match <div1>, <div2>, and <div3> elements,
No. It matches all nodes (match="node()") and indexes them by the
genererate-id of the nearest preceding sibling dvi* , or the parent if
there is no such sibling.
This means that if you are on a div* and look up the key using the
generate-id of teh current node, you get returned the nodes that have
this key value, which is all teh nodes for which this is the nearest
preceding sibling div*
making a key on node9) is a bit expensive as it puts every node in teh
document into the index, you would probably be better to change the
match to
div1/node()
just to collect the dvi2 and gendiv children of a div1 and have similar
specific keys for the other levels.
David
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list