5

我有 xpath

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

它返回两个表。

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

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

如何只选择第一张桌子?

4

2 回答 2

7

这也困扰着我。我仍然不完全知道为什么您的解决方案不起作用。但是,这应该:

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

编辑:正如文档所说,

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

多亏了你的问题,我终于明白为什么会这样了:)。因此,根据您的结构和需求,这应该可行。

于 2012-04-05T19:17:18.313 回答
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")
于 2012-07-25T22:12:23.283 回答