<tr id="" class="">
<td class="level 1" style="">
<td class="Level 1: Sub level 1" style="">
<a title="Tricky">
<img src="edit.png">
</a>
<a title="Tricky-2">
<img src="reports.png">
</a>
<span class="eoc_indicator"></span>
</td>
<td class="level 1: Sub level 2" style="">
<a target="" href="">Hello world</a>
</td>
</tr>
我需要在td类中选择元素“img src ='edit.png'”元素:'level 1:sub level 1',它位于td
标签class ='level 1 '包含带有文本'Hello World'的td
元素
我想到的xpath是这样的
tr[**/td/a[contains(@text,'Hello World')]]/td/a/img[contains(@src,'edit.png')]
但我无法找到,我做错了什么???
答案 0 :(得分:2)
不是@text
,而是text()
:@text
查找属性text
。 text()
选择上下文节点的所有文本节点子节点。
使用下面的XPath(我相信它更简单):
tr[contains(*/td/a/text(),'Hello World')]/td/td/a/img[contains(@src,'edit.png')]
另外,我不了解XPath的所有内容,但似乎**
(两个星号)无效。它在我的工具中出现语法错误,我无法在任何XPath规范[1] [2]中找到它。
这样,要使原始表达式有效,只需修复@text
- &gt; text()
,删除双星号**
- &gt; *
,然后添加最后必要的/td/
就足够了:
tr[*/td/a[contains(text(),'Hello World')]]/td/td/a/img[contains(@src,'edit.png')]
^ ^ ^^ ^^^
或者,如果您想在任何级别匹配'Hello World'
:
tr[//td/a[contains(text(),'Hello World')]]/td/td/a/img[contains(@src,'edit.png')]
^
答案 1 :(得分:0)
这是您要查找的XPath表达式
tr[//td/a[contains(text(),'Hello world')]]/td/td/a/img[contains(@src,'edit.png')]
使用online XPath tester进行了测试。我在</td>
之前添加了/<tr>
,因为您提供的样本不是格式良好的xml。
答案 2 :(得分:0)
这应该有用,应该很容易理解:
/tr/td[td/a='Hello world']/td/a/img[@src='edit.png']
如果//tr
不是您的根元素,您可以使用tr
启动xpath。
构建像这样的xpath的最简单方法是获取直接路径,然后通过添加谓词来缩小范围。
所以我从:
开始/tr/td/td/a/img
为“Hello world”添加谓词:
/tr/td[td/a='Hello world']/td/a/img
然后为“edit.png”添加谓词:
/tr/td[td/a='Hello world']/td/a/img[@src='edit.png']