我必須閱讀可通過http進行身份驗證的xml文件。這就是我使用機械化的原因。(Rails)無法獲得Mechanize正確讀取Web xml文件
我的問題是我無法機械識別這些XML文件,所以我可以使用.find或.search對它們進行操作。
這是我第一次嘗試 - 在我看來,(HTML文件)
<% agent = Mechanize.new %>
<% page = agent.get("http://dl.dropbox.com/u/344349/xml.xml") %>
<%= page %>
它返回#<Mechanize::File:0x007f9dd602de30>
。這::File
而不是::Page
我不能使用.find或.search這個,因爲它會與undefined method find for #<Mechanize::File:0x007f9dd624cbd0>
機械化文檔錯誤說:這是可插拔解析器默認值(和底座)類。如果機械化無法找到用於內容類型的適當類,則將使用此類。例如,如果你下載JPG,Mechanize將不知道如何解析它,所以這個類將被實例化。
所以我創建了一個類如下所述:http://rdoc.info/github/tenderlove/mechanize/master/Mechanize/PluggableParser
My class
class XMLParser < Mechanize::File
attr_reader :xml
def initialize(uri=nil, response=nil, body=nil, code=nil)
super(uri, response, body, code)
@xml = xml.parse(body)
end
end
,並在我看來,更新的代碼(HTML文件)
<% agent = Mechanize.new %>
<% agent.pluggable_parser['text/xml'] = XMLParser %>
<% agent.user_agent_alias = 'Windows Mozilla' %>
<% page = agent.get("http://dl.dropbox.com/u/344349/xml.xml") %>
<%= page %>
甚至
<% agent = Mechanize.new %>
<% agent.pluggable_parser.xml = XMLParser %>
<% page1 = agent.get('http://dl.dropbox.com/u/344349/xml.xml') # => CSVParser %>
<%= page1 %>
仍返回#<Mechanize::File:0x007f9dd5253b48>
我甚至測試確切的代碼(CSVParser - http://rdoc.info/github/tenderlove/mechanize/master/Mechanize/PluggableParser),並試圖加載一個仍然被視爲一個::文件csv文件。
我在做什麼錯?
我不是100%完成,但它現在看起來工作。謝謝伯爵! – 2012-02-22 12:31:09
非常感謝!這是一個拯救生命的人! – bloveless 2012-06-29 23:05:15