代码之家  ›  专栏  ›  技术社区  ›  Rok

解析内的ruby nokogiri解析

  •  0
  • Rok  · 技术社区  · 10 年前

    我正在学习如何使用nokogiri gem在ruby中编程。

    doc.xpath("//*[@class='someclass']//@href")
    

    将返回HTML中“someclass”类下的所有href值。

    doc.xpath("//*[@class='someclass']").xpath("//@href")
    

    将返回整个HTML中的所有href。

    有人可以向我解释一下,有人会如何在xpath中使用//@等价物,例如,在解析的数据中,比如:

    doc.xpath("//*[@class='someclass']").xpath(grab all the href within previously parsed)
    

    可能吗?

    使用*,@似乎很强大,但我似乎无法缩小范围,除了搜索整个HTML,无论我在哪里使用它。。

    作为一个初学者,我只是觉得这会…直觉?能够使用“从任何地方抓取”类型的语法,仅限于之前解析过的语法,以缩小目标范围,因此我可以执行以下操作

    xpath(whatever).css(whatever).xpath(whatever)
    

    也许这不是一个好的做法?也许有了对解析概念的更多理解,我就不必这么做了?有时我发现使用xpath和CSS更容易。。

    希望有人能启发我。。

    1 回复  |  直到 10 年前
        1
  •  1
  •   LarsH    10 年前

    尝试将第二个表达式从

    doc.xpath("//*[@class='someclass']").xpath("//@href")
    

    doc.xpath("//*[@class='someclass']").xpath(".//@href")
    

    // 在XPath表达式的开头表示“文档根的后代”,而 .// 表示“上下文节点的后代”

    XPath是强大的,它的一些主要方面是直观的。。。但有些重要的部分不是直觉的,或者取决于你的直觉是如何训练的。仔细研究会有收获,特别是如果您打算大量使用XPath!