В одном классе наш учитель дал нам проект для преобразования CSV в формат XML и снова из XML в CSV и сказал нам выбирать между Python и Ruby.Я предпочел Ruby, так как он казался мне более простым и понятным как язык.
Я сделал первую часть, конвертировал из CSV в XML, и он отлично работает.Но когда я хочу конвертировать из XML в CSV, мой код работает, но только для определенного файла XML.Я хочу, чтобы он работал для любого XML-файла.
Вот мой XML, и я не помещаю все это, потому что он большой:
<?xml version="1.0"?>
<records>
<company>
<id>p1</id>
<name>Skoda</name>
<price>10000</price>
<stock>4</stock>
<country>Czech Republic</country>
</company>
<company>
<id>p2</id>
<name>Mercedes</name>
<price>50000</price>
<stock>5</stock>
<country>Germany</country>
</company>
<company>
<id>p3</id>
<name>Alfa Romeo</name>
<price>18000</price>
<stock>19</stock>
<country>Italy</country>
</company>
<company>
<id>p4</id>
<name>Fiat</name>
<price>1500</price>
<stock>15000</stock>
<country>Italy</country>
</company>
</records>
И мой код Ruby для преобразования XML в CSV:
xmlinputfile = gets.chomp
print "\n"
csvoutputfile = gets.chomp
print "\n"
puts "Writing CSV..."
print "\n"
xml_file = File.open(xmlinputfile, "r")
xml = REXML::Document.new( xml_file )
csv_file = File.new(csvoutputfile, "w")
xml.elements.each("records") do |e|
e.elements.each("company") do |f|
csv_file.puts f.elements['id'].text + "," + f.elements['name'].text + ","
+ f.elements['price'].text + "," +
f.elements['stock'].text + ","+ f.elements['country'].text + ","
end
end
print "Job Done !!! \n"
puts "Contents of #{xmlinputfile} were written in CSV format to #{csvoutputfile}.\n\n"
Проблема в том, что этот код Ruby будет выполнять свою работу только для вышеуказанного XML, а не для любого другого кода XML, потому чтоЯ не могу найти способ заставить код самостоятельно читать теги XML и размещать их содержимое в формате CSV.В этом коде выше я помещаю себя вручную теги XML в качестве строкового аргумента в
f.elements ['xml_tag']
и, таким образом, это может занятьих содержание и писать в формате CSV.Но это нехорошо, потому что, когда я беру другой XML с большим количеством тегов, он не будет работать.
Что я хочу сделать, так это то, что, когда я вставляю имя входного файла xml, код сам находит, сколько теговтам есть в xml и взять их содержимое и выложить в формате CSV.
Пожалуйста, это очень важно.Я должен дать этот проект за 3 дня, и я пытался почти неделю и ничего не делал.Вы, ребята, мой последний шанс!