【问题标题】:What is the difference between // and .// in XPath?XPath 中的 // 和 .// 有什么区别?
【发布时间】:2021-04-23 17:40:45
【问题描述】:

当我通过 google.com 在 Chrome 开发者工具的控制台上执行这些 XPath 表达式时,我得到了相同的结果

  • $x("(.//*[@id='gs_lc0'])")

  • $x("(//*[@id='gs_lc0'])")

点在XPath中有什么用?

【问题讨论】:

  • 一个(//)是绝对路径,另一个(.//)是相对路径。 (.//) 选择不同的节点集,其中 (.) 表示它从当前节点开始。另一方面,使用 (//) 选择具有您提供的属性的所有元素节点。
  • 我不这么认为,因为绝对路径是使用 / 之类的 /html/body/h1 构建的,两者都是相对路径
  • @PedroMachado:您对been answered 的问题满意吗?

标签: xml google-chrome xpath google-chrome-devtools


【解决方案1】:

在 XPath 中,//.// 都是语法缩写:

  • ///descendant-or-self::node()/ 的缩写
  • .//self::node()/descendant-or-self::node()/ 的缩写

descendant-or-self 轴包含上下文节点和上下文节点的所有后代。 所以//.// 之间的差异减少到上下文节点的差异。

对于//,上下文节点是根节点; // 是一个 absolute location path

对于.//,上下文节点依赖于上下文; .//relative location path。在 Google Developer Tools 控制台的顶级评估中,上下文节点是根节点,因此您会看到相同的结果。

简而言之:

  • 如果您希望从整个文档中选择节点,请使用 //
  • 如果您希望仅选择上下文节点下方的节点,请使用 .//

【讨论】:

    猜你喜欢
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多