gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:06:42 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com