我有一个CSV文件,我想用ruby解析并从中生成XML。
以下是CSV示例:
id;us;de
1;hello;hallo
2;usa;deutschland
3;big;gross
完成后,XML应如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cat id="1">
<attrs>
<attr attr-id="word" xml:lang="us">hello</attr>
<attr attr-id="word" xml:lang="de">hallo</attr>
</attrs>
</cat>
<cat id="2">
<attrs>
<attr attr-id="word" xml:lang="us">usa</attr>
<attr attr-id="word" xml:lang="de">deutschland</attr>
</attrs>
</cat>
<cat id="3">
<attrs>
<attr attr-id="word" xml:lang="us">big</attr>
<attr attr-id="word" xml:lang="de">gross</attr>
</attrs>
</cat>
</catalog>
这就是我的ruby文件到目前为止的样子:
require 'csv'
file = File.open("file.csv", "r:UTF-8").read
data = CSV.parse(file, :quote_char => "'", :col_sep => ";")
data.each do |column|
id = column[0]
puts id
end
我得到了每一列,但我无法遍历它以生成XML。你知道如何获得我的最终XML吗?
答案 0 :(得分:0)
require 'csv'
puts '<?xml version="1.0" encoding="UTF-8"?>'
CSV.foreach("data.csv") do |row|
puts '<catalog>'
puts '<cat id=' + "#{row[0]}" + '>'
puts '<attrs>'
puts '<attr attr-id="word" xml:lang=' + "#{row[1]}" +'>hello</attr>'
puts '<attr attr-id="word" xml:lang=' + "#{row[2]}" +'>hello</attr>'
puts '</attrs>'
puts '</cat>'
end
puts '</catalog>'
答案 1 :(得分:0)
更一般的情况:
require 'nokogiri'
require 'csv'
builder = Nokogiri::XML::Builder.new do |xml|
xml.items {
CSV.foreach 'items.csv', headers: true do |row|
xml.item {
row.headers.each do |key|
xml.send key, row[key]
end
}
end
}
end
File.open('items.xml', 'w'){|f| f << builder.to_xml}