为什么我的 XPath 表达式 return 没有任何结果?

Why doesn't my XPath expression return any results?

我有以下 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

我得到的结果为零。 有人可以解释为什么吗?

xPath表达式中我们也可以使用属性名称和标签名称(当它有文本时)。这里 <tr><td> 都是标签名。有效的 xPath 表达式类似于

//tagname[@attributeName='value']

//tagname[@tagname='text']

td里面只有文字,所以你需要写xPath喜欢

//td[text()='Color Digest ']

//tr[td='Color Digest ']

如果您需要使用特定元素,请使用如下匹配编号,

(//td[text()='Color Digest '])[1]

(//tr[td='Color Digest '])[1]

为什么显示 0 匹配您的 xPath

您还没有在 Digest 的末尾给出 space

你的:

//tr[td='Color Digest']/td

更正一个:

//tr[td='Color Digest ']/td

您的 XPath 存在一些问题

tr[td='Color Digest']/td
^ 1
   ^ 2
                     ^ 3
  1. XPath 应以 /(child)或 //(后代)开头。 Child 基本上意味着向下一层,而后代意味着向下一层或多层。

    在这种情况下,

    tr 应该是 //tr,因为没有根 TR。

  2. 当您似乎打算使用 .text() 时,您使用了 td,这表明元素中有两种文本变体。 . 表示压缩所有后代节点包含的文本,text() 表示只包含当前节点的文本。

    在这种情况下,text(). 都可以,但为了安全起见,我通常会使用 text()

    [td='Color Digest'] 应该是 [text()='Color Digest']

  3. 如果您查看您提供的 HTML,第一个 TD 中的文本实际上在末尾包含一个 space,例如'Color Digest ' 对比 'Color Digest'。除非您使用 contains().

    之类的函数,否则 space 是必需的

    [td='Color Digest'] 应该是 [text()='Color Digest ']

  4. 对于最后一个,我不确定您实际上在寻找什么,/td

    对于包含“Color Digest”文本的 TD,它没有 child。如果您指的是兄弟 TD,则需要 /following-sibling.

    /td 应该是 /following-sibling::td[1].

将所有这些放在一起,

//tr[text()='Color Digest ']/following-sibling::td[1]

它会return以下元素

<td>AgArAQICGQMVBBwTIRQHIwg0GUMURAZTBWQJcwV0AoEDAQ </td>
<td>2,43,2,25,21,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...</td>