更新: ActiveResource 也不是 XML 解析器。它是一个 REST 消费者,允许您与远程资源进行交互,类似于 ActiveRecord 模型。它确实使用了底层的 XML 解析器(我假设通过 ActiveSupport 的 XmlMini 我在下面显示)。
ActiveResource 对 XML 内容的结构有一些严格的要求,并且在与另一个 Rails 应用程序的 REST API 交互时效果最好。它不打算对 HTML 页面进行通用屏幕抓取。为此,请直接使用 Nokogiri。
ActiveSupport 不是 XML 解析器,它是有用的 Ruby 方法和类的杂项集合。但是,它确实为许多不同的 XML 解析器提供了一个包装器,为您提供了一致的界面。
您可以查看正在使用的 XML 解析器并切换到不同的 XML 解析器。试试这个script/console
。
ActiveSupport::XmlMini.backend # => ActiveSupport::XmlMini_REXML
ActiveSupport::XmlMini.backend = 'Nokogiri'
ActiveSupport::XmlMini.backend # => ActiveSupport::XmlMini_Nokogiri
# it will now use Nokogiri
但是,这仍将使用 Nokogiri 中的 XML 解析器,它假定严格、有效的标记。大多数 HTML 页面不符合这个严格的要求,因此最好直接使用 Nokogiri 的 HTML 解析器,而不是通过 ActiveSupport。
doc = Nokogiri::HTML(...)