xpath选择第一个表

时间:2012-04-05 19:14:21

标签: xpath mechanize

我有xpath

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

返回两个表。

我只需要选择第一张桌子。这行不起作用:

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

如何只选择第一张桌子?

2 个答案:

答案 0 :(得分:7)

这也让我感到烦恼。我仍然不知道为什么你的解决方案不起作用。但是,这应该:

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

编辑:正如the docs所说,

  

“位置路径//para[1]与位置的含义不同   路径/descendant::para[1]。后者选择第一个后代   对元素;前者选择所有后代的para元素   他们父母的第一个孩子。“

感谢您提出的问题,我终于明白为什么这样做了:)。因此,根据您的结构和需求,这应该有效。

答案 1 :(得分: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")