Xpath选择元素基于2个子元素条件

时间:2015-01-24 03:05:57

标签: html xpath

这是html代码:

<table>
<tr class="WhiteRow">
    <td align="center">
        <input id="SelectedDelivery1" type="checkbox" onclick="HandleClick(this.name,this.checked,"")" value="Y" name="SelectedDelivery1">
    </td>
    <td valign="top">
        <span></span>
        <span class="bold">Instrument Search</span>
        <br>
        abc (TRANSFER)
    </td>
    <td align="center">5 minutes</td>
    <td class="noborder" align="right">
    <td class="noborder" align="right">
    <td class="noborder" align="right">
    <td class="noborder" align="right">
</tr>
<tr>
    <td align="center">
        <input id="SelectedDelivery2" type="checkbox" onclick="HandleClick(this.name,this.checked,"")" value="Y" name="SelectedDelivery1">
    </td>
    <td valign="top">
        <span></span>
        <span class="bold">Instrument Search</span>
        <br>
        abc (CAVEAT)
    </td>
    ...
</tr>
</table>

我想定位包含<tr><span class="bold">Instrument Search</span>的{​​{1}}。该tr可能不是表格中的第一个元素。

到目前为止,我试过

abc (TRANSFER)

只满足其中一个条件,并且有几个tr满足选择器。

你能告诉我如何针对他们两个

2 个答案:

答案 0 :(得分:0)

在浏览语法后,我发现自己是一个答案。 如果还有其他更好的方法,请告诉我

//td/span[text()="Instrument Search"]/ancestor::td/text()[contains(., "TRANSFER")]/ancestor::tr

答案 1 :(得分:0)

使用以下XPath表达式:

//tr[contains(., 'abc (TRANSFER)') and contains(td/span[@class = 'bold'], 'Instrument Search')]

如果可能的话,你应该总是使用单向的表达式,因为&#34;向后&#34;像ancestor::这样的轴可能是一个代价高昂的举动。这比您已经找到的解决方案更具优势。

如果span[@class = 'bold']不能包含&#34;乐器搜索&#34;以外的任何内容,您应该将上面的表达式修改为:

//tr[contains(., 'abc (TRANSFER)') and td/span[@class = 'bold'] = 'Instrument Search']

&#34; abc(TRANSFER)&#34;的位置仍然不是很精确,如果在某个地方需要(例如总是在td元素内),你必须进一步限制上述内容。


编辑回复您的评论:

  

abc(TRANSFER)在td标签内,它只是一个文本字段

然后使用

//tr[contains(td, 'abc (TRANSFER)') and td/span[@class = 'bold'] = 'Instrument Search']