You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:54:00