相同的 XPath 节点 returns 不同的结果

Same XPath Node returns different result

假设我得到了以下简单的 .xml 文件

<a>
  <b>
    <c>
      <n id = "1"/>    
    </c>  
    <n id = "2"/>    
    <n id = "3"/>    
  </b>
</a>

以及以下查询及其各自的结果:

"//n[preceding::n]/@id" result = 2 3
"//n[preceding::n and following-sibling::n]/@id" result = 2

对我来说,两个查询都“停止”在同一个节点,即 <n id = "2"/> ,因为它是第一个名为 n 的节点,它有一个 preceding::n (前面的一个名为 an 的节点)并且也是第一个名为 n 的节点,其中有一个 preceding::n(一个名为 n 的前一个节点)一个 following-sibling::n(一个名为 n 的下一个兄弟节点)

那为什么我会得到不同的结果?

preceding::n指的是any node in the structure

preceding Indicates all the nodes that precede the context node in the document except any ancestor, attribute and namespace nodes.

这个会得到相同的结果

xmllint --xpath '//n[preceding-sibling::n or following-sibling::n]/@id' test.xml
 id="2" id="3"