假设我们有一个基本上如下的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/
答案 0 :(得分:6)
小心 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函数剥离前导和尾随空格,并用单个空格替换空白字符序列。)
a
,b
,span
,div
等<td>gr8t</td>
,<td>123456789</td>
等。normalize-space()
将忽略前导空格或尾随空格
围绕8
。答案 1 :(得分:2)
尝试使用以下xpath,它将选择整个文本内容而不是部分匹配:
//table//td[text()='8']
编辑:您的示例HTML在td元素中有一个标记,因此以下内容将起作用:
//table//td/a[text()="8"]
请参阅php中的示例:https://3v4l.org/56SBn