XPath 1.0中括号的作用是什么?

时间:2018-09-04 11:32:01

标签: google-chrome xpath xpath-1.0

在Chrome DevTools>元素中,当我搜索//tr/td/span时,我发现了一个元素(因为该元素存在于我的页面中)。

当我搜索(//tr)/td/span(//tr/td)/span时,我也找到了该元素。

但是//tr(/td)/span//tr/(td)/span//tr/(td/)span都找不到任何东西。

XPath中这些括号的含义是什么?

2 个答案:

答案 0 :(得分:2)

与其他编程语言一样,XPath中的括号也被使用:

  1. 函数参数分组:,例如://tr/td[contains(.,"e")]
  2. 评估优先级指示:,例如:普通算术表达式分组以及前导路径分组(在XPath中从LocationPathPrimaryExpr语法(//td)[1]中的内容来查找文档中的第一个td,而//td[1]则查找td元素,它们是其各自父元素的第一个子元素。 / li>

它们也用在

  1. 节点测试:例如:node()element(),...
  2. 处理说明:例如PageBreak()

您未找到任何内容的示例(例如://tr(/td)/span//tr/(td)/span 1 等)中的括号嵌入了上述其中之一未遵循的路径类别。括号的这种使用实际上 在语法上是无效的 ,应该这样报告,而不是默默地失败。

1 请注意,该表达式在XPath 2.0 / 3.0下实际上在语法上是有效的。谢谢@Andersson的注意。

答案 1 :(得分:1)

在您的情况下,我不认为括号意味着什么,但是它可能会用于返回所需的一个或多个节点集,具体取决于传递的索引

例如,HTML如下:

<table>
  <tr>
    <td>
      <span>first</span>
    </td>
    <td>
      <span>second</span>
    </td>
  </tr>
    <tr>
    <td>
      <span>third</span>
    </td>
      <td>
      <span>fourth</span>
    </td>
  </tr>
</table>
  • (//tr)[1]/td仅返回第一行的单元格(firstsecond

  • (//tr)[2]/td-第二行(thirdfourth

  • (//tr/td)[1]-第一行的第一单元格(first)。 请注意,//tr/td[1]将返回每行的每个第一个单元格(firstthird

    ...