我有一个 XML 片段,看起来像
<body>
Some text....
<nodeA>....</nodeA>
more text
<someOtherNode>
<nodeA>.......</nodeA>
</someOtherNode>
<nodeB>.......</nodeB>
etc.....
</body>
我选择<body>
内的所有nodeA和NodeB节点使用类似于的 XPATH 查询
//nodeA|//nodeB
据我了解,.NET 支持 XPath 1.0,但不保证节点顺序。
如何保证所选节点在我的 OR 查询中按文档顺序返回:也就是说:
nodeA, nodeA, nodeB
最佳答案
As I understand it, .NET supports XPath 1.0 which does not guarantee node order
当计算选择节点的 XPath 1.0 表达式时,所选节点形成一个节点集。 节点集是一个集合,这意味着它是无序的。
但出于实际目的,选择了一种主要顺序来枚举节点集的节点:文档顺序。实际上,我所知道的所有 XPath 1.0 引擎(当然还有 .NET 中的引擎)都按文档顺序返回选定的节点。将来这种情况不太可能改变,因为供应商试图保持向后兼容性。
因此,只需尝试使用 SelectNodes()
或 Evaluate()
方法并验证结果中的节点是否按文档顺序排列 .
请注意:无法保证以下顺序,并且取决于实现:
同一元素的属性。
属于不同文档的节点(可以使用 XSLT 函数
document()
生成包含来自不同文档的节点的节点集,因此您很可能不关心这一点) .
关于.net - 如何保证 XPath 'OR' 查询的节点顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4497962/