【发布时间】:2012-04-05 19:14:21
【问题描述】:
我有 xpath
page.search("//table[@class='campaign']//table")
返回两个表。
我只需要选择第一张桌子。此行不起作用:
page.search("//table[@class='campaign']//table[1]")
如何只选择第一个表?
【问题讨论】:
我有 xpath
page.search("//table[@class='campaign']//table")
返回两个表。
我只需要选择第一张桌子。此行不起作用:
page.search("//table[@class='campaign']//table[1]")
如何只选择第一个表?
【问题讨论】:
这也困扰着我。我仍然不完全知道为什么您的解决方案不起作用。但是,这应该:
page.search("//table[@class='campaign']/descendant::table[1]")
编辑:正如the docs 所说,
"位置路径
//para[1]与位置不一样 路径/descendant::para[1]。后者选择第一个后代 对元素;前者选择所有后代 para 元素 他们父母的第一个准孩子。”
感谢您的提问,我终于明白了为什么会这样 :)。因此,根据您的结构和需求,这应该可行。
【讨论】:
除了使用 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")
【讨论】: