【问题标题】:xpath choose first tablexpath 选择第一个表
【发布时间】:2012-04-05 19:14:21
【问题描述】:

我有 xpath

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

返回两个表。

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

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

如何只选择第一个表?

【问题讨论】:

    标签: xpath mechanize


    【解决方案1】:

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

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

    编辑:正如the docs 所说,

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

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

    【讨论】:

      【解决方案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")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-21
        • 1970-01-01
        • 2015-10-11
        • 2022-12-16
        • 2016-11-26
        • 2016-03-16
        • 1970-01-01
        相关资源
        最近更新 更多