2
require 'net/ftp'
require 'nokogiri'

server = "xxxxxx"
user = "xxxxx"
password = "xxxxx"

ftp = Net::FTP.new(server, user, password)

files = ftp.nlst('File*.xml')

files.each do |file|
   ftp.getbinaryfile(file)
   doc = Nokogiri::XML(open(file))
   # some operations with doc
end

使用上面的代码,我可以解析/读取 XML 文件,因为它首先下载一个文件。

但是如何在不下载的情况下解析远程 XML 文件呢?

上面的代码是运行时加载 rails 环境的 rake 任务的一部分。


更新:

我不会创建任何文件。我将使用 mongoid 将信息导入 mongodb。

4

1 回答 1

7

如果您只是想避免使用临时本地文件,可以通过提供nil本地文件名直接获取文件内容作为字符串,并在内存中处理:

files.each do |file|
   xml_string = ftp.getbinaryfile( file, nil )
   doc = Nokogiri::XML( xml_string )
   # some operations with doc
end

这仍然会通过 FTP 获取内容,并且 XML 解析发生在客户端。

确实不可能避免以某种形式或其他形式获取数据,如果 FTP 是您唯一可用的协议,那么这意味着使用 FTP 通过网络复制数据get。然而,向您的 FTP(或其他基于网络的)服务器添加功能并以其他形式返回数据是可能的,但要复杂得多。这可能包括在服务器上远程完成 Nokogiri 解析,但您仍然需要序列化最终结果,获取它并反序列化它。

于 2013-07-03T09:50:31.820 回答