ruby-on-rails - 如何知道何时使用 XML 解析器以及何时使用 ActiveResource?

标签 ruby-on-rails web-services nokogiri hpricot activesupport

我尝试使用 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/

相关文章:

jquery - Rails 3/jquery - 使用 ajax 渲染部分选项卡

facebook - 类似于 Windows 的 'localtunnel'

c# - 通过 sql profiler 测试 Web API 服务?

java - Web 服务类转换异常

ruby - 我如何使用 Nokogiri 来解析这个 HTML?

ruby-on-rails - 如何使用 Ruby on Rails 纠正 Nokogiri 的加载错误?

ruby - 有_属性?问题

ruby-on-rails - ruby rails : undefined method 'before_save'

mysql - 是否可以在 sqlite 数据库中使用相同的索引名称?

ruby-on-rails - Ruby/Rails - 在新窗口中从 Controller 打开 URL