【问题标题】:ruby nokogiri parse within parsedruby nokogiri 解析内解析
【发布时间】:2014-09-15 15:07:13
【问题描述】:

我只是在学习如何使用 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 更容易..

希望有人能启发我..

【问题讨论】:

    标签: css ruby xpath html-parsing nokogiri


    【解决方案1】:

    尝试改变你的第二个表达方式

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

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

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

    XPath 功能强大是对的,并且它的一些主要方面是直观的……但是有些重要的部分并不直观,或者取决于您的直觉是如何训练的。仔细研究会有收获,尤其是在您打算大量使用 XPath 的情况下!

    【讨论】:

    • 非常感谢您的快速回答和反馈。我的主要来源是 w3school。您愿意推荐任何学习 XPath 的书籍或资源吗?将不胜感激.. 我确实计划使用 XPath!
    • @Rok:好问题。在过去,我发现 w3schools 过于简单化并且经常具有误导性,但从某些方面来看,它已经有所改善(w3fools.com)。无论如何,stackoverflow.com/questions/5372312/… 提供了一些值得一看的好地方。
    • @Rok:举一个 w3schools 质量低下的例子:w3schools.com/XPath/xpath_nodes.asp 关于原子值的说法几乎是完全错误的。
    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    相关资源
    最近更新 更多