假设我们有一个基本如下所示的 HTML 表格:
2|1|28|9|
3|8|5|10|
18|9|8|0|
我想选择只包含 8 个单元格的单元格,即只包含第 2 行的第 2 个单元格和第 3 行的第 3 个单元格。
这是我尝试过的://table//td[contains(.,'8')]
。它为我提供了所有包含 8 的单元格。因此,我也得到了不需要的值 28 和 18。
我该如何解决这个问题?
编辑:如果您想尝试您的 xpath,这里有一个示例表。使用左侧的日历- https://sfbay.craigslist.org/sfc/
最佳答案
注意contains()
函数。
使用它来测试元素是否包含值是一个常见的错误。它真正做的是测试一个字符串是否包含一个子字符串。因此,td[contains(.,'8')]
获取 td
( .
) 的字符串值并测试它是否包含任何 '8'
子字符串。这可能是您想要的,但通常不是。
这个 XPath,
//td[.='8']
将选择 string-value 等于 td
的所有 8
元素。
或者,这个 XPath,
//td[normalize-space()='8']
将选择 normalize-space() 字符串值 等于 td
的所有 8
元素。 (normalize-space() XPath 函数去除前导和尾随空白,并用单个空格替换空白字符序列。)
注意事项:
- 即使 8 位于另一个元素(例如 a)中,两者也能正常工作
a
,b
,span
,div
等 - 两者都不匹配
<td>gr8t</td>
、<td>123456789</td>
等。 - 使用
normalize-space()
将忽略前导或尾随空格 围绕8
。
另见:
关于html - 如何对特定文本使用 XPath contains()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39650007/