Как разобрать файл 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, выполненный удаленно на сервере, но вам все равно нужно будет сериализовать конечный результат, получить его и десериализовать.

Другие вопросы по тегам