我尝试使用 ActiveResource 来解析更像 HTML 文档的 Web 服务,但一直收到 404 错误。
我是否需要使用 XML 解析器来完成此任务而不是 ActiveResource?
我的猜测是,只有当您使用来自另一个 Rails 应用程序的数据并且 XML 数据可以轻松转换为 Rails 模型时,ActiveResource 才有用。例如,如果 Web 服务是更广泛的 XML(如 HTML 文档或 RSS 提要),则您需要使用 hpricot 或 nokogiri 等解析器。它是否正确?
如何知道何时使用 XML 解析器以及何时使用 ActiveResource?
Update: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(...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)