什么XPath选择其中一个标签中具有特定“X”的元素

时间:2013-06-28 21:26:38

标签: xpath

<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')]

但我无法找到,我做错了什么???

3 个答案:

答案 0 :(得分: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 - &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']