如何将http请求的文件(xml)存储到对象中?

时间:2009-07-08 14:57:47

标签: ruby-on-rails ruby

我想获取一个xml文件,我可以通过http请求将其请求到一个对象中。 我正在寻找类似的东西(在控制器中):

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

http://tickets.com?ticketid=1234返回XML(tickets.com不是应用程序运行的网站)。

然后我想解析@ticket,从xml中获取数据。

很多你的帮助!

4 个答案:

答案 0 :(得分:2)

如果您只想将XML下载到字符串中,可以执行以下操作:

require 'open-uri'

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

如果要解析此XML并提取数据,则需要查看 某种解析器,例如LibXmlNokogiri

如果您尝试从其他Rails应用程序访问数据,可能 ActiveResource 是可行的方法。这是一个不错的introduction

答案 1 :(得分:1)

查看HTTParty以便超级轻松地使用网络服务。基本上,你会做这样的事情:

class Ticket
  include HTTParty
  format :xml
end

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

然后您可以访问哈希中的元素:

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

答案 2 :(得分:1)

获得xml数据后,您可以使用Active Support Hash扩展将其转换为哈希

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

这样你就不需要额外的lib了,并且想要遍历xml。 YMMV

注意:不确定此方法如何处理元素属性。

答案 3 :(得分:0)

您可以像这样使用Hpricot XML method

require 'open-uri'
require 'hpricot'

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

然后,您可以使用Hpricot动态方法轻松解析@ticket。请参阅Hpricot页面中的一些示例。