2009-07-08 38 views
1

我想獲取一個xml文件,我可以通過http請求將它請求到一個對象中。 我在尋找一些類似的(在控制器):如何將http請求的文件(xml)存儲到對象中?

@ticket = request "http://example.com?ticketid=1234" 

http://tickets.com?ticketid=1234返回XML(tickets.com不是應用程序正在運行的網站)。

然後我想解析@ticket,以獲取數據的XML。

Thx很多爲您的幫助!

+0

您是否希望@ticket包含XML或實際上是反映XML表示的數據的類的實例? – 2009-07-08 15:00:17

+0

我還沒有想過。是的,我想在此之後脫離xml的數據,繼續工作。之後我沒有看到如何處理這個問題(我在編程方面很新穎,所以我一步一步地做)。 thx – 2009-07-08 15:16:33

回答

2

如果你只是想下載的XML轉換成字符串,下面會做:

require 'open-uri' 

xml = URI.parse("http://example.com?ticketid=1234").read 

如果要分析這個XML和提取數據,你需要看看 某種解析器,例如LibXmlNokogiri

如果您嘗試從另一個Rails應用程序訪問數據,則可能需要使用ActiveResource。這是一個不錯的introduction

1

退房HTTParty超級簡單的Web服務消費。基本上,你會做這樣的事情:

class Ticket 
    include HTTParty 
    format :xml 
end 

@ticket = Ticket.get('http://url/to/ticket') 

然後你就可以訪問元素在哈希:

@ticket['title'] # => the <title> element 
1

一旦你的XML數據,您可以使用Active支持哈希的擴展,將其轉化變成哈希

xml = URI.parse("http://example.com?ticketid=1234").read 
data = Hash.from_xml(xml) 

這樣你不需要額外的庫,並找出遍歷xml。 YMMV

注意:不確定此方法如何處理元素屬性。

0

您可以使用Hpricot XML method這樣的:

require 'open-uri' 
require 'hpricot' 

@ticket = Hpricot.XML open "http://example.com?ticketid=1234" 

然後你就可以輕鬆地分析@ticket與角度來說,Hpricot動態方法。請參閱Hpricot頁面中的一些示例。