.net - 如何保证 XPath 'OR' 查询的节点顺序

标签 .net xml xpath

我有一个 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() 方法并验证结果中的节点是否按文档顺序排列 .

请注意:无法保证以下顺序,并且取决于实现:

  1. 同一元素的属性。

  2. 属于不同文档的节点(可以使用 XSLT 函数 document() 生成包含来自不同文档的节点的节点集,因此您很可能不关心这一点) .

关于.net - 如何保证 XPath 'OR' 查询的节点顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4497962/

相关文章:

.net - 在 TFS 2010 中是否有任何等效于报告者(或更改 "Created By"字段的方法)

c# - C#.Net 中的文件复制

c# - 使用 iTextSharp 将表单字段的不同部分设置为具有不同的字体

xml - 使用 perl 和 LibXML 从 XML 中提取节点并解析结果

java - 如果有一个 XML 响应并且它存储在字符串缓冲区中,我将如何解析它?

c# - 我的 InvokeRequied #2 有什么问题?

java - 删除 XML 输入文件 Java

xml - 如何使用属性值匹配两组节点而不使用两个 <xsl :for-each>

python - 如何通过Selenium WebDriver和Python定位用户名和密码元素

html - 如何找到类名和通用属性的 xpath?