Ask*_*kar 2 ruby nokogiri xml-parsing net-ftp ruby-on-rails-4
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
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,我能够解析/读取XML文件,因为它首先下载文件.
但是如何在不下载的情况下解析远程XML文件?
上面的代码是rake任务的一部分,它在运行时加载rails环境.
更新:
我不打算创建任何文件.我将使用mongoid将信息导入mongodb.
如果您只是想避免使用临时本地文件,则可以直接以String形式获取文件内容,并通过提供nil本地文件名在内存中处理:
files.each do |file|
xml_string = ftp.getbinaryfile( file, nil )
doc = Nokogiri::XML( xml_string )
# some operations with doc
end
Run Code Online (Sandbox Code Playgroud)
这仍然会对内容进行FTP提取,并且在客户端进行XML解析.
实际上不可能避免以某种形式或其他形式获取数据,如果FTP是唯一可用的协议,那么这意味着使用FTP通过网络复制数据get.但是,向FTP(或其他基于网络的)服务器添加功能并以其他形式返回数据是可能的,但要复杂得多.这可能包括在服务器上远程完成Nokogiri解析,但您仍然需要序列化最终结果,获取它并对其进行反序列化.