#独家
Xpath 解析中上下文节点的作用是什么?

2023-07-28 0 3,422
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
</head>
<body>
  <div>
    hello world
    <span>你好世界</span>
    <span>你好世界</span>
  </div>
</body>
</html>

执行下面的代码

const xPathEvaluator = new XPathEvaluator()
const expression = xPathEvaluator.createExpression('/html/body')
console.log(expression.evaluate(document.querySelector('div')).iterateNext())
console.log(expression.evaluate(document).iterateNext())

evaluate 方法中第一个参数是上下文节点,以上执行的结果是相同的,都是 body 元素,请问一下这个上下文节点参数的作用是什么?

evaluate 方法的第一个参数传递给了该表达式。这个上下文节点参数指定了 XPath 表达式执行的 起始点 或者搜索的范围。

只不过在题主这个例子中,刚好 不会 体现出变化

如果将上下文节点设置为 document.querySelector('div'),则表示从 div 元素开始执行 XPath 表达式。因此,在这种情况下,expression.evaluate(document.querySelector(‘div’)).iterateNext() 的结果是 body 元素。

  • 首先,document.querySelector(‘div’) 选择了文档中的 div 元素作为上下文节点
  • 然后,由于 div 内部没有 html 元素,因此无法匹配到 /html/body 这个路径。但是,在这种情况下,XPath 解析器会 自动向外 扩展搜索范围,并从整个文档的 根元素 开始进行搜索。因此,在最终结果中可以找到匹配 /html/body 的第一个符合条件的节点,也就是 body 元素

如果将上下文节点设置为 document,则表示从整个文档开始执行 XPath 表达式。所以 expression.evaluate(document).iterateNext() 的结果也是 body 元素。

可以看到,在题主的例子中,无论上下文节点是哪个元素( div 或 document),XPath 表达式都会返回相同的结果 body 元素。因为/html/body 这个表达式本身就选择了 body 元素作为目标。

比如 ../span 是根据你的 evaluate() 的节点作为初始入口来判断的。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 Xpath 解析中上下文节点的作用是什么? https://www.jkxiazai.com/2290.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务