XPath中的“ / node”和“ node”有什么区别?

问题描述

根据我对XPath的理解,对于任何HTML或XML文档:
$x("/node()")表示$x("/child::node()"),表示返回上下文节点的子节点。在此,根节点(/)是上下文节点。因此,它返回html元素。

$x("node()")的意思是$x("child::node()"),它也返回相同的html元素。但是在这种情况下,与上述情况不同,我们没有提供上下文节点。那么,在这种情况下如何识别上下文节点?

上面的XPath表达式在语法和功能上都是相同的。

解决方法

区别在于/node()绝对将上下文节点指定为文档根(/),而node()依赖于隐式相对上下文节点。

如何确定隐式相对上下文节点?好吧,基于上下文。 ;-) 例如,托管语言通常会将初始上下文节点设置为要匹配或迭代的当前节点。然后,在对XPath本身的评估中,每个定位步骤(以斜杠/分隔)将为后续步骤建立上下文节点。

Chrome控制台中使用的$x(path,[startNode])表示法带有一个可选的第二个参数,可用于显式指定上下文节点。默认情况下,它等于文档根节点,这导致观察到的行为,其中$x("node()")$x("/node()")返回给定文档的结果相同。

上面的XPath表达式在语法和功能上都是相同的。

node()child::node()显然在语法上是不同的,但是,是的,它们在语义上是 (或在功能上是 ,就像您说的一样),因为child::轴是默认轴。

另请参见

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...