これは私が達成しようとしているものです。私はヘッダーといくつかの行を持つ単一のCSVを持つ必要があります。私はヘッダーを繰り返し実行してから、行データをヘッダーに関連付けます。私は、CSVの各行を繰り返して、XMLのデータを構築するために使用できるようにする必要があります。作成されたXMLは.xmlファイルとしてダンプされ、プログラムはCSVの次の行で開始されます。各行には、XMLファイルの名前を示す列があります。Ruby - Builder - いくつかのXMLを構築するためのデータセットとしてCSVの行を変換しようとしています
これまでのところ私はこれを持っています。
CSVファイルのデータを読み込みます。ヘッダーと行のデータを収集します。
def get_rows
raw_data = CSV.read('test.csv', {:skip_blanks => false, :headers => true})
data = []
raw_data.each { |row| data << row}
return build_header(data, raw_data)
end
ヘッダーと行のデータを取り上げて結びつけます。
def build_header(data, raw_data)
(0..(data.length - 1)).each do |ri|
h = {}
raw_data.headers.each_with_index do |v, i|
h[v] = data[ri].fields[i]
end
return build_ostruct(h)
end
end
ハッシュhをとり、それを作成します。この下に
def build_ostruct(h)
x = OpenStruct.new(h)
uniq = x.tc_name
y = uniq_name.to_s + ".xml"
#marshal dump for debugging
x.marshal_dump.each{ |k,v| puts "#{k} => #{v}" }
return xml_builder(x, y)
end
私は新しいostruct "x" を取って、例えばXMLノードに
を#populateするCSVから列ヘッダーを呼んでいる:x.column1、x.column2、X。 column3
ここでは、繰り返し処理ごとにデータの新しい行を受け取るようにostructを取得しています。目的は、CSVの各行にオブジェクトを入れることです。現在のところ、ハッシュは適切なデータセットを表示していて、私のXMLは予期されたとおりにデータが取り込まれていますが、データの最初の行のみが埋め込まれています。これをどのようにしてすべての行を繰り返し処理し、繰り返しごとのデータでオブジェクトを作成して、XMLのバルク・セットを作成することができますか?
ご協力いただきありがとうございます!
あなたはcsvファイルのサンプルと希望xml出力を提供してもらえますか?あなたのコードは(少なくともRubyでは)本当にシンプルなものを複雑にするので、それは多くの助けになります。 –