例如这样的代码:
<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。如何获得第二个结果和最后一个结果,而不考虑“法国”实际所在的位置?
答案 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()