为什么我的 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
XPath 应以 /
(child)或 //
(后代)开头。 Child 基本上意味着向下一层,而后代意味着向下一层或多层。
在这种情况下,tr
应该是 //tr
,因为没有根 TR。
当您似乎打算使用 .
或 text()
时,您使用了 td
,这表明元素中有两种文本变体。 .
表示压缩所有后代节点包含的文本,text()
表示只包含当前节点的文本。
在这种情况下,text()
或 .
都可以,但为了安全起见,我通常会使用 text()
。
[td='Color Digest']
应该是 [text()='Color Digest']
如果您查看您提供的 HTML,第一个 TD 中的文本实际上在末尾包含一个 space,例如'Color Digest ' 对比 'Color Digest'。除非您使用 contains()
.
之类的函数,否则 space 是必需的
[td='Color Digest']
应该是 [text()='Color Digest ']
对于最后一个,我不确定您实际上在寻找什么,/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>
我有以下 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
XPath 应以
在这种情况下,/
(child)或//
(后代)开头。 Child 基本上意味着向下一层,而后代意味着向下一层或多层。tr
应该是//tr
,因为没有根 TR。当您似乎打算使用
.
或text()
时,您使用了td
,这表明元素中有两种文本变体。.
表示压缩所有后代节点包含的文本,text()
表示只包含当前节点的文本。在这种情况下,
text()
或.
都可以,但为了安全起见,我通常会使用text()
。[td='Color Digest']
应该是[text()='Color Digest']
如果您查看您提供的 HTML,第一个 TD 中的文本实际上在末尾包含一个 space,例如'Color Digest ' 对比 'Color Digest'。除非您使用
之类的函数,否则 space 是必需的contains()
.[td='Color Digest']
应该是[text()='Color Digest ']
对于最后一个,我不确定您实际上在寻找什么,
/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>