【问题标题】:Selecting a specific table with XPath使用 XPath 选择特定表
【发布时间】:2010-10-27 06:12:56
【问题描述】:

我有一个 XHTML 文档,我想选择其中唯一具有 class="index" 的表。

如果我理解正确,后代轴将选择所有从当前节点直接和间接下降的节点,所以这就是我所得到的。

//descendant::table[@class="index"]

使用 xmlstarlet 进行测试时,它似乎无法正常工作。是我的工具坏了,还是 XPath 表达式错误?

【问题讨论】:

  • 如果您发布示例输入,我们可以确定该工具是否损坏。 (例如,您可能需要使用命名空间前缀。)一个快速说明,//descendant:: 是多余的。在这种情况下,使用 /descendant::table(只有一个斜杠)或简单地使用 //table。 “//”是“/descendant-or-self::node()/”的简写
  • metacritic.com/film/highscores.shtml 就是这样一个例子,但它必须通过 Tidy 和其他一些调整才能准备好 XSLT。
  • 调整是否包括添加 XHTML 命名空间声明?在 XPath 中,如果要按名称选择使用命名空间的节点,则必须声明命名空间(并在表达式中使用前缀)。

标签: xml xslt xpath screen-scraping


【解决方案1】:

我认为//table[@class="index"]是你想要的

【讨论】:

    【解决方案2】:

    根据您的示例页面 (metacritic.com/film/highscores.shtml),我会说您需要使用:

    //TABLE[@CLASS="index"] 
    (or /descendant::TABLE[@CLASS="index"])
    

    这是因为带有 CLASS 索引的 TABLE 在您的示例页面上以大写形式写入(XML 和 XPath 区分大小写)。

    如果您针对特定页面,这将起作用,但如果不同页面对相同的 html 标签使用不同的大小写,则可能会成为问题。

    那你需要一个像这样的可憎之物

    //TABLE[@CLASS="index" or @class="index" or @Class="index" or ...]
    |//table[@CLASS="index" or @class="index" or ...]
    |...
    

    因此,您可能需要在提取信息之前继续使用 Tidy,或者切换到专门用于 HTML 抓取的工具(而不是 XPath)

    【讨论】:

    • 确实,tidy 是该过程的一部分,但它会处理一些格式不佳的 HTML,这些 HTML 会将 td 放入表单中。我已经有了一个基于 BeautifulSoup 和 uTidy 的几乎可以工作的版本;我认为下一步是弄清楚如何通过 tidy 或 sed 修复丑陋的表单。
    【解决方案3】:

    是的,descendant 轴选择从上下文节点降序的所有节点。但这里的关键是上下文节点。

    例如,descendant::span 将检索当前节点的所有 span 后代。同样,descendant::* 将检索当前节点的所有后代元素。

    如果您需要匹配表和子表,您提供的 XPath 在我的测试期间可以正常工作:

    //descendant::table[@class="index"]
    

    ...选择表本身和子节点。

    如果只需要匹配表的孩子,先匹配你想要的节点匹配它的后代:

    //table[@class="index"]/descendant::*
    

    .. 仅选择表的子节点。

    【讨论】:

      【解决方案4】:

      使用此代码

         let $info :=($p//descendant::TABLE[@class="index"])
              return $info
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 2019-01-21
        • 1970-01-01
        相关资源
        最近更新 更多