I have a snippet of XML that looks like
<body>
Some text....
<nodeA>....</nodeA>
more text
<someOtherNode>
<nodeA>.......</nodeA>
</someOtherNode>
<nodeB>.......</nodeB>
etc.....
</body>
I’m selecting all nodeA and NodeB nodes inside <body> using an XPATH query similar to
//nodeA|//nodeB
As I understand it, .NET supports XPath 1.0 which does not guarantee node order.
How can I guarantee selected nodes are returned in document order in my OR query : that’s to say:
nodeA, nodeA, nodeB
When an XPath 1.0 expression that selects nodes is evaluated, the selected nodes form a node-set. A node-set is a set and this, among many other things, means that it is unordered.
For practical purposes, though, there is one main ordering chosen to enumerate the nodes of a node set: document order. In practice, all XPath 1.0 engines I know (and certainly in .NET) return the selected nodes in document order. In the future this is unlikely to change, because vendors try to preserve backwards compatibility.
Therefore, just try using the
SelectNodes()orEvaluate()methods and verify that the nodes in the results are in document order.Do note: The order of the following cannot be guaranteed and is implementation-dependent:
Attributes of the same element.
Nodes belonging to different documents (a node-set containing nodes from different documents can be produced using the XSLT function
document(), so this most probably is of no concern to you).