Как разобрать файл XML удаленно с FTP с помощью nokogiri gem, без скачивания
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 при запуске.
ОБНОВИТЬ:
Я не собираюсь создавать какой-либо файл. Я буду импортировать информацию в mongodb, используя mongoid.
1 ответ
Если вы просто хотите избежать использования временного локального файла, можно извлечь содержимое файла напрямую в виде строки и обработать в памяти, предоставив 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, выполненный удаленно на сервере, но вам все равно нужно будет сериализовать конечный результат, получить его и десериализовать.