更新: 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(...)
謝謝,瑞恩!我實際上是按照您在第一個屏幕錄像中給出的使用ActiveSupport定義模型並將數據從一個應用程序傳遞到另一個應用程序的說明。即使資源在瀏覽器中可用,我仍然收到404。這就是爲什麼我認爲它可能與來自外部服務的數據格式不能被ActiveSupport接受有關。 – chimp 2009-08-10 17:21:27
你指的是哪一集?你的意思是ActiveResource? – ryanb 2009-08-10 17:51:32
該死的,我一直在談論ActiveSupport時我一直在談論ActiveResource。我很抱歉。 – chimp 2009-08-10 19:57:07