在Chrome DevTools>元素中,当我搜索//tr/td/span
时,我发现了一个元素(因为该元素存在于我的页面中)。
当我搜索(//tr)/td/span
或(//tr/td)/span
时,我也找到了该元素。
但是//tr(/td)/span
,//tr/(td)/span
和//tr/(td/)span
都找不到任何东西。
XPath中这些括号的含义是什么?
答案 0 :(得分:2)
与其他编程语言一样,XPath中的括号也被使用:
//tr/td[contains(.,"e")]
LocationPath
到PrimaryExpr
语法(//td)[1]
中的内容来查找文档中的第一个td
,而//td[1]
则查找td
元素,它们是其各自父元素的第一个子元素。 / li>
它们也用在
中node()
,element()
,... 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
仅返回第一行的单元格(first
,second
)
(//tr)[2]/td
-第二行(third
,fourth
)
(//tr/td)[1]
-第一行的第一单元格(first
)。 请注意,//tr/td[1]
将返回每行的每个第一个单元格(first
,third
)
...