Xpath的// tr / td / a [text()=“France”]显示3场比赛。如何获得“x”结果的价值?

时间:2015-11-18 00:53:36

标签: xpath position

例如这样的代码:

<tr>
    <td width="270" class="news">
        <a href="/lists/test_acc/1/" class="all">Ukraine</a>
        <span>17.06.15<span>
    </td>
</tr>

<tr>
    <td width="270" class="news">
        <a href="/lists/test_acc/1/" class="all">France</a>
        <span>17.06.15<span>
    </td>
</tr>

<tr>
    <td width="270" class="news">
        <a href="/lists/test_acc/1/" class="all">USA</a>
        <span>17.06.15<span>
    </td>
</tr>

<tr>
    <td width="270" class="news">
        <a href="/lists/test_acc/1/" class="all">France</a>
        <span>10.10.15<span>
    </td>
</tr>

<tr>
    <td width="270" class="news">
        <a href="/lists/test_acc/1/" class="all">Germany</a>
        <span>17.06.15<span>
    </td>
</tr>

<tr>
    <td width="270" class="news">
        <a href="/lists/test_acc/1/" class="all">France</a>
        <span>23.12.15<span>
    </td>
</tr>

在Chrome的开发人员面板中,此xpath //tr/td/a[text()="France"]向我显示了3个结果。 我无法找到获得所需价值的方法。

例如,如何获得第二个结果的日期(10.10.15)? 我使用position尝试了不同的方式,例如//tr/td/a[text()="France"][position=2]/span/text()//tr/td/a[position(text()="France")][2]/span/text()等,但没有成功。也许“位置”不是我需要的?

EDITED: “法国”在代码中的位置因页面而异。在上面的例子中,现在位置是2,4,6,但在另一页上它可以是3,10,15,25,27。如何获得第二个结果和最后一个结果,而不考虑“法国”实际所在的位置?

2 个答案:

答案 0 :(得分:1)

这是一种可能的方式:

(//tr/td[a='France'])[2]/span/text()

位置索引前的括号是必需的,因为([])的优先级(优先级)高于(///)*。因此,例如,此表达式//tr/td[a='France'][2]/span/text()将在单个td父级中查找第二个tr,而这在您发布的HTML示例中不存在。

*:有关此问题的进一步说明:How to select specified node within Xpath node sets by index with Selenium?

答案 1 :(得分:0)

你的“xml”无效,所以我先纠正它(我知道它不是有效的HTML,但足以测试):

<?xml version="1.0" encoding="utf-8"?>
<form>
 <tr>
   <td width="270" class="news">
     <a href="/lists/test_acc/1/" class="all">France</a>
     <span>17.06.15</span>
   </td>
 </tr>
 <tr>
   <td width="270" class="news">
     <a href="/lists/test_acc/1/" class="all">France</a>
     <span>10.10.15</span>
   </td>
 </tr>
 <tr>
   <td width="270" class="news">
     <a href="/lists/test_acc/1/" class="all">France</a>
     <span>23.12.15</span>
   </td>
 </tr>
</form>

然后,这有效:

//tr[position()=2]/td/a[text()="France"]/../span/text()