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文件呢?
上面的代码是 rake 任务的一部分,它在运行时加载 rails 环境。
更新:
我不打算创建任何文件。我将使用 mongoid 将信息导入 mongodb。
如果您只是想避免使用临时本地文件,则可以通过将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解析,但您仍然需要序列化最终结果,获取并反序列化它。