2012-04-05 102 views
4

我的XPath的XPath选择第一台

page.search("//table[@class='campaign']//table") 

返回两个表。

我只需要选择第一个表格。此行不起作用:

page.search("//table[@class='campaign']//table[1]") 

如何只选择第一个表?

回答

7

这也给我带来了困扰。我仍然不完全知道你的解决方案为什么不起作用。然而,这应该:

page.search("//table[@class='campaign']/descendant::table[1]") 

编辑:作为the docs说,

“的位置路径//para[1]并不意味着相同位置 路径/descendant::para[1]后者选择第一个后裔 para元素;前者选择 他们父母的第一个para孩子的所有后代para元素。“

感谢您的问题,我终于明白了为什么这个工作方式:)。所以,根据你的结构和需求,这应该起作用。

+0

它的工作原理,感谢你 – megas 2012-04-05 19:40:02

2

而是使用XPath表达式选择第一个匹配的元素,你可以找到所有这些,然后削减下来:

first_table = page.search("//table[@class='campaign']//table").first 

...或更好,但只选择了首先使用at

first_table = page.at("//table[@class='campaign']//table") 

还要注意你的表达可以通过使用CSS选择器语法更简单地发现:

first_table = page.at("table.campaign table")