我一直在阅读XPath规范并使用XPath Visualizer Tool以获得更深入的XPath 1.0知识。
我可以使用/
选择文档的根节点。当我在工具中输入此字符时,它的文本编辑器中没有显示可视选择,但状态栏包含以下文本:
"/: 1 node selected"
,
这是预期的。选择的是不可见的根节点(文档根)。
然而,当我将/*/parent::*
字符序列输入到工具中时,我得到了
"/*/parent::*: Zero nodes selected"
。
工具是否正确或该表达式是否也应选择根节点?
我还尝试使用祖先轴代替父,其中规格说明如下:
祖先轴包含上下文节点的祖先;上下文节点的祖先由上下文节点的父节点和父节点的父节点组成,依此类推;因此,祖先轴将始终包含根节点,除非上下文节点是根节点
具体提到了根节点。因为在我的情况下,第一个位置步骤的上下文节点是文档元素,结果集是否应该包含根节点?为什么不呢?
规格也说明了这一点:
父轴包含上下文节点的父节点(如果有)
和此:
/选择文档根目录(始终是文档元素的父目录)
请注意,我故意在上面的文本中使用与规范中使用的相同的术语。
Edit01
加载到工具中的xml文档是格式良好的XML文档,因此非空。
答案 0 :(得分:5)
/
是该文件。不是文档元素(正如你自己提到的那样)。
*
选择一个元素(与attribute::
或namespace::
一起使用时除外)。
对于任何节点,parent::*
选择父节点,只要它是一个元素,而不仅仅是任何父节点。因此,对于文档元素,parent::*
不存在。
/*
是文档元素,因此/*/parent::*
不能存在。
ancestor::*
也是如此。由于document元素的唯一祖先不是元素,因此不匹配。