相同的 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"
假设我得到了以下简单的 .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"