XPath 表达式/
返回文档节点。
一个 XPath 表达式/html
等效于/child::html
并且给定一个 HTML 文档将返回 html 元素。这当然是通过转到文档节点(由 表示/
)然后找到作为 html 标记的子元素来评估的。
那么为什么/document-node()
实际上返回文档节点?
给定一般的 XPath 表达式规则,我假设/document-node()
它等价于/child::document-node()
,并且/child::document-node()
应该返回一个空节点序列(因为文档节点永远不是文档节点的子节点)。事实上/child::document-node()
确实返回了一个空节点序列,这让我相信它/document-node()
不等于/child::document-node()
. 这似乎违反了一般 XPath 表达式规则,其中空轴是隐含的子轴1。
是否有一些特殊规则,当你有一个document-node()
轴的步长时,假设是self
而不是child
?我正在使用最新版本的 Altova XMLSpy (2018 sp1)。或者,这是 XMLSpy 中的错误吗?还是我对一般 XPath 表达式规则的某些理解不正确?
注意:对于任何尝试这个的人,只有 XPath 2 和 XPath 3 支持document-node()
。
1更新:作为一个不相关的 FYI,我从 Mads Hansen 的回答中学到了一些新东西:在 XPath 2 和 XPath 3 中,除非有属性测试,否则空轴是隐含的子轴;如果有一个属性测试,它实际上是一个隐含的属性轴。所以 while/html
是隐含/child::html
的,/attribute()
是隐含的/attribute::attribute()
。