Bagaimana saya bisa mengkonversi file CSV ke XML?

8

Bagaimana saya bisa mengkonversi file CSV ke XML?

Apakah ada perangkat lunak untuk Ubuntu?

Vitor Mazuco
sumber
Saya tidak mengerti. Tiga format yang Anda sebutkan adalah file teks biasa --- perbedaannya ada pada konten. Dan ruang lingkup. Maukah Anda menambahkan contoh?
Rmano
1
Voting untuk membuka kembali. Saya menganggap ini cukup mudah dan mudah dijawab ;-)
Rinzwind
1
Saya mendukung Rinzwind, karena saya hanya meminta perangkat lunak yang dapat dikonversi.
Vitor Mazuco

Jawaban:

7

Di situs komunitas tentang konversi ada tautan ke alat baris perintah yang disebut csv2xml . Karena tidak terawat, Anda mungkin ingin memilih opsi lain.

Ada juga menyebutkan alat java yang disebut csv2xml (peringatan: situs web dalam bahasa Jerman) dan alat baris perintah yang disebut ff-extractor .

Tautan ini juga memiliki referensi ke Python, Perl, PHP, XSLT tetapi itu berarti Anda harus mengkodekan konverter sendiri.

Rinzwind
sumber
1
Saya memperbarui sedikit dengan referensi di tautan 1. Ada juga produk komersial bernama Altova ( altova.com ).
Rinzwind
10

Ketika Anda mengetahui format csvfile dan struktur yang Anda butuhkan dalam xmlfile tersebut, cukup mudah untuk membuat skrip yang dapat menangani konversi.

Ambil file simple.csv:

Jack,35,United States
Jill,22,United Kingdom

Anda dapat membuat xmlfile berikut :

<?xml version="1.0"?>
<Customers>
  <Customer>
    <Name>Jack</Name>
    <Age>35</Age>
    <Country>United States</Country>
 </Customer>
 <Customer>
    <Name>Jill</Name>
    <Age>22</Age>
    <Country>United Kingdom</Country>
 </Customer>
</Customers>

Dengan skrip berikut:

#!/bin/bash
file_in="simple.csv"
file_out="simple.xml"
echo '<?xml version="1.0"?>' > $file_out
echo '<Customers>' >> $file_out
while IFS=$',' read -r -a arry
do
  echo '  <Customer>' >> $file_out
  echo '    <Name>'${arry[0]}'</Name>' >> $file_out
  echo '    <Age>'${arry[1]}'</Age>' >> $file_out
  echo '    <Country>'${arry[2]}'</Country>' >> $file_out
  echo '  </Customer>' >> $file_out
done < $file_in
echo '</Customers>' >> $file_out

Bahkan jika Anda belum pernah berkode sebelumnya, saya pikir ini harus mudah digunakan dan dimodifikasi. File dibaca baris demi baris dalam whileloop.

IFSadalah specifier bidang internal. Yang IFS=$','menyatakan bahwa nilai pemisah bidang adalah koma. Ini standar untuk file CSV, tetapi dapat diubah sesuai kebutuhan untuk mencocokkan format file input.

The -rargumen ke readperintah mengatakan itu untuk mengobati backslashes dalam file Anda sebagai bagian dari data Anda daripada sebagai pelarian untuk karakter khusus berikut.

The -a arryArgumen menempatkan setiap kolom file Anda ke dalam sebuah array (bernama arry). Kolom dalam contoh ini adalah nama, umur, negara. Dengan kata lain nilai-nilai di antara koma. Jadi setiap kolom di baris disimpan dalam array.

Kemudian teks yang diperlukan untuk xmlhanya melilit nilai-nilai dan xmlbaris ditambahkan ke file output dengan echo.

chaskes
sumber
@chaskes, jika Anda akan menjelaskan opsi yang digunakan while IFS=$',' read -r -a arry , itu berguna untuk yang lain. Terima kasih.
alhelal
@BandaMuhammadAlHelal Selesai.
chaskes
Bagaimana Anda menangani koma yang muncul di dalam bidang, dikelilingi oleh tanda kutip ganda? Seperti di "Somename, Jack"tempat Jackdalam file input?
muk.li
1
@ muk.li Pemisah bidang input (biasanya koma) ditandai pada baris awal: sementara IFS = $ ','. Katakanlah separator adalah tanda bintang, Anda hanya perlu mengubahnya menjadi: $ '*'. Jadi, dalam kasus Anda, seharusnya $ '"' (penawaran tunggal, penawaran ganda, penawaran tunggal). Ini seharusnya berfungsi dengan baik, tetapi mengutip dalam shell bisa menjadi rumit, dan saya belum memiliki kesempatan untuk mengujinya.
chaskes
1

Solusi yang cukup ramah pengguna (yaitu, mudah untuk numpties seperti saya) untuk tantangan konversi CSV ke XML adalah dengan menggunakan editor XML lintas-platform yang bagus yang memiliki fitur bawaan . (Saya sudah menggunakannya di Ubuntu dan Mac OSX 10.10.5; ini juga memiliki Windows yang dapat dieksekusi.)

XMLSpear

Seperti yang disebutkan, ini adalah editor XML, tetapi termasuk "impor" CSV-to-XML (dan Excel-to-XML) pada menu utamanya:

masukkan deskripsi gambar di sini

Itu dikonversi file CSV 31Mb untuk saya (dump dari database perpustakaan 20.000 entri) dalam waktu sekitar 15 detik, memberi saya file XML yang terbentuk dengan baik untuk menyimpan dan memanipulasi.

Sebagai editor, ia memiliki banyak fitur sambutan lainnya (dirinci di tautan, di atas). Saya tidak dapat menemukan penyebutan lisensi untuk itu, tetapi ini termasuk dalam "README":

XMLSpear adalah perangkat lunak gratis untuk penggunaan pribadi.
Silakan kirim umpan balik Anda ke [email protected] atau di forum http://donkeydevelopment.com/forums.

Penggunaan komersial harus disetujui oleh pengembangan donkey.
Cukup kirim email ke [email protected] dengan subjek "permintaan lisensi".

Readme juga membantu menyertakan konten untuk file .desktop.

Melakukan pekerjaan dengan baik untuk saya di bawah Ubuntu 18.04 LTS (Gnome).

Dɑvïd
sumber
0

Saya penggemar berat BaseXyang tampaknya memiliki kemampuan impor:

http://docs.basex.org/wiki/CSV_Module


Mungkin menunjukkan bahwa tampaknya, lebih mudah untuk menggunakan aplikasi web:

https://webapps.stackexchange.com/q/123959/24327

Yang berarti plugin atau ekstensi ke browser yang bekerja dengan lembar google.

Saya merasakan rasa sakit Anda karena ini adalah utilitas yang tampaknya sederhana yang seharusnya tersedia melalui apt.

Thufir
sumber
0

Saya menyarankan Anda atau seseorang menulis kode dengan Python. Python mudah dipelajari dan menyelesaikan masalah Anda dengan mudah. Ini memiliki modul CSV dan modul XML . Saran saya mempertimbangkan bahwa Anda mungkin perlu memiliki nama Anda sendiri untuk elemen XML atau memiliki persyaratan kompleks lainnya (seperti mengubah kolom CSV terakhir menjadi atribut kolom terakhir tetapi satu).

Ada banyak tutorial online tentang Python.

Stefano Mtangoo
sumber