2
<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标签类 = 'level 1' 中,其中包含一个td带有文本的元素'你好世界'

我想到的xpath是这样的

tr[**/td/a[contains(@text,'Hello World')]]/td/a/img[contains(@src,'edit.png')]

但我找不到,我做错了什么???

4

3 回答 3

2

不是@text,而是text():@text寻找属性texttext()选择上下文节点的所有文本节点子节点。

使用下面的 XPath(我相信它更简单):

tr[contains(*/td/a/text(),'Hello World')]/td/td/a/img[contains(@src,'edit.png')]

附带说明一下,我对 XPath 并不了解,但似乎**两个星号)是无效的。它在我的工具中给出了一个语法错误,我在任何 XPath 规范[1] [2]中都找不到它。

这样,要使您的原始表达式起作用,只需修复@text-> text(),删除双星号**-> ,并在末尾*添加必要的就足够了:/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')]
   ^
于 2013-06-28T21:59:10.920 回答
0

这是您正在寻找的 XPath 表达式

tr[//td/a[contains(text(),'Hello world')]]/td/td/a/img[contains(@src,'edit.png')]

它使用在线 XPath 测试器进行了测试。我之前添加</td>/<tr>,因为您提供的示例不是格式正确的 xml。

于 2013-06-28T21:49:07.420 回答
0

这应该有效并且应该易于理解:

/tr/td[td/a='Hello world']/td/a/img[@src='edit.png']

//tr或者您可以使用if tris not your root element启动 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']
于 2013-06-28T22:57:31.123 回答