“/”与XPath 1.0中的“/ * / parent :: *”相同吗?

时间:2014-01-03 09:22:44

标签: xml xpath

我一直在阅读XPath规范并使用XPath Visualizer Tool以获得更深入的XPath 1.0知识。

我可以使用/选择文档的根节点。当我在工具中输入此字符时,它的文本编辑器中没有显示可视选择,但状态栏包含以下文本:

"/: 1 node selected"

这是预期的。选择的是不可见的根节点(文档根)。

然而,当我将/*/parent::*字符序列输入到工具中时,我得到了

"/*/parent::*: Zero nodes selected"

工具是否正确或该表达式是否也应选择根节点?

我还尝试使用祖先轴代替,其中规格说明如下:

  

祖先轴包含上下文节点的祖先;上下文节点的祖先由上下文节点的父节点和父节点的父节点组成,依此类推;因此,祖先轴将始终包含根节点,除非上下文节点是根节点

具体提到了根节点。因为在我的情况下,第一个位置步骤的上下文节点是文档元素,结果集是否应该包含根节点?为什么不呢?

规格也说明了这一点:

  

父轴包含上下文节点的父节点(如果有)

和此:

  

/选择文档根目录(始终是文档元素的父目录)

请注意,我故意在上面的文本中使用与规范中使用的相同的术语。

Edit01

加载到工具中的xml文档是格式良好的XML文档,因此非空。

1 个答案:

答案 0 :(得分:5)

/是该文件。不是文档元素(正如你自己提到的那样)。

*选择一个元素(与attribute::namespace::一起使用时除外)。

对于任何节点,parent::*选择父节点,只要它是一个元素,而不仅仅是任何父节点。因此,对于文档元素,parent::*不存在。

/*是文档元素,因此/*/parent::*不能存在。

ancestor::*也是如此。由于document元素的唯一祖先不是元素,因此不匹配。