我尝试使用 ActiveResource 解析更像 HTML 文档的 Web 服务,但一直收到 404 错误。
我是否需要使用 XML 解析器来完成此任务而不是 ActiveResource?
我的猜测是,只有当您使用来自另一个 Rails 应用程序的数据并且 XML 数据可以轻松转换为 Rails 模型时,ActiveResource 才有用。例如,如果 Web 服务是更广泛的 XML(如 HTML 文档或 RSS 提要),则您需要使用 hpricot 或 nokogiri 等解析器。这是正确的吗?
如何知道何时使用 XML 解析器以及何时使用 ActiveResource?
最佳答案
更新: ActiveResource 也不是 XML 解析器。它是一个 REST 使用者,允许您与远程资源进行交互,类似于 ActiveRecord 模型的方式。它确实在底层使用了 XML 解析器(我假设通过下面显示的 ActiveSupport 的 XmlMini)。
ActiveResource 对 XML 内容的结构有一些严格的要求,并且在与另一个 Rails 应用程序的 REST API 交互时效果最佳。它的目的不是对 HTML 页面进行通用屏幕抓取。为此,直接使用 Nokogiri。
<小时/>ActiveSupport 不是一个 XML 解析器,它是有用的 Ruby 方法和类的各种集合。然而,它确实提供了许多不同 XML 解析器的包装器,为您提供了一致的接口(interface)。
您可以查看正在使用哪个 XML 解析器并切换到不同的 XML 解析器。在脚本/控制台
中尝试一下。
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(...)
关于ruby-on-rails - 如何知道何时使用 XML 解析器以及何时使用 ActiveResource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1254761/