为什么我的XPath表达式执行后没有返回任何匹配结果?
你提供的HTML代码片段:
<html> <body> <table> <tr> <tr> <tr> <tr> <tr> <td>Color Digest </td> <td>AgArAQICGQMVBBwTIRQHIwg0GUMURAZTBWQJcwV0AoEDAQ </td> </tr> <tr> <td>Color Digest </td> <td>2,43,2,25,21,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, </td> </tr> </table> </body> </html>
你使用的有问题的XPath:
tr[td='Color Digest']/td
匹配失败的核心原因
- 严格文本匹配不通过:HTML里对应
<td>的文本末尾带有多余空格,实际内容是Color Digest(注意末尾空格),而XPath的=属于完全精确字符串匹配,内容多一个空格都会判定为不相等,自然无法命中节点。 - 相对路径上下文不符:你写的
tr[xxx]是相对路径,只有当前执行XPath的上下文处于<table>节点下时才会检索到对应,如果从文档根节点/<body>节点开始检索,直接写tr找不到对应元素。
修复方案
使用normalize-space()函数消除文本前后的多余空白,同时补全路径匹配所有符合条件的节点:
//tr[td[normalize-space(text()) = 'Color Digest']]/td
如果需要限定仅匹配当前表格下的行,可调整为:
//table/tr[td[normalize-space(text()) = 'Color Digest']]/td

内容的提问来源于stack exchange,提问作者Eitanos30
相关产品推荐
相关产品推荐

