xsl-list
[Top] [All Lists]

RE: sorted for-each: preceding::sibling is not in sort order

2005-11-13 09:11:14
Working on a grouping problem I was trying to use preceding::sibling
on a selection of nodes that I had assembled with for-each and sorted.

It took me a long time to find out that while for-each will 
present the
nodes in sort order, preceding::sibling will give me the
results for a totally different node (probably document order).

Is this intended behaviour 

Yes. A node has a fixed position in a tree. A tree is immutable: you cannot
change the parent, children, or siblings of an existing node. The axes all
relate to the relationship of the node to other nodes in the same tree.

xsl:sort affects the processing order of the nodes (or in XSLT 2.0, the
ordering of a sequence of nodes) but it does not affect the node's axis
relationships.

And if 
so, what is
the best way around this. The only way I found was to do a first
for-each copy-of all the nodes into a variable, then work with the
content of the variable in a second for-each using that variable.

One big disadvantage being that I'm cutting off all the parent
relationships when copying my node.

Yes, in 1.0 that's a problem. XSLT 2.0 allows you to use xsl:sequence
instead of xsl:copy-of, so you can construct a variable whose value is a
sequence of nodes (node references) without making copies of the nodes.

Michael Kay
http://www.saxonica.com/



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--