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 に答える