web-dev-qa-db-ja.com

CSVファイルをXMLに変換するにはどうすればよいですか?

CSVファイルをXMLに変換するにはどうすればよいですか?

Ubuntu用のソフトウェアはありますか?

8
Vitor Mazuco

community website 変換時に csv2xml と呼ばれるコマンドラインツールへのリンクがあります。メンテナンスされていないため、別のオプションを選択できます。

csv2xml (警告:ウェブサイトはドイツ語)と呼ばれるJavaツールと ff-extractor と呼ばれるコマンドラインツールについても言及されています。

このリンクにはPython、Perl、PHP、XSLTへの参照もありますが、それはコンバーターを自分でコーディングする必要があることを意味します。

7
Rinzwind

csvファイルの形式とxmlファイルで必要な構造がわかっている場合、変換を処理できるスクリプトを作成するのはかなり簡単です。

ファイルsimple.csvを取得します。

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

次のxmlファイルを作成できます。

<?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>

次のスクリプトを使用します。

#!/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

以前にコーディングしたことがない場合でも、これは簡単に使用および変更できるはずです。ファイルは、whileループで1行ずつ読み取られます。

IFSは内部フィールド指定子です。 IFS=$','は、フィールド区切り文字の値がコンマであることを宣言します。これはCSVファイルの標準ですが、入力ファイル形式に合わせて必要に応じて変更できます。

readコマンドの-r引数は、ファイル内のバックスラッシュを、後続の特殊文字のエスケープとしてではなく、データの一部として扱うように指示します。

-a arry引数は、ファイルの各列を(arryという名前の)配列に配置します。この例の列は、名前、年齢、国です。言い換えれば、コンマの間の値。そのため、行の各列は配列に格納されます。

次に、xmlに必要なテキストが値を囲むだけで、xml行が出力ファイルにechoで追加されます。

10
chaskes

CSVからXMLへの変換の課題に対するかなりユーザーフレンドリーな(つまり、私のような数えやすい人にとって)ソリューションは、ニースcross-platformXMLエディターを使用することですこの機能が組み込まれています。 (UbuntuとMac OSX 10.10.5の両方で使用しましたが、Windows実行可能ファイルもあります。)

XMLSpear

前述のように、これはXMLエディターですが、メインメニューにCSVからXML(およびExcelからXML)の「インポート」が含まれています。

enter image description here

約15秒で31MbのCSVファイル(20,000エントリのライブラリデータベースからのダンプ)を変換し、保存して操作するための整形式のXMLファイルを提供しました。

エディターとして、他の多くの歓迎機能があります(上記のリンクで詳しく説明しています)。ライセンスに関する言及はありませんが、これは「README」に含まれています。

XMLSpearは個人用のフリーソフトウェアです。
[email protected]またはフォーラムhttp://donkeydevelopment.com/forumsにフィードバックを送信してください。

商用利用はロバ開発によって承認されなければなりません。
「ライセンス要求」という件名のメールを[email protected]に送信するだけです。

また、readmeには.desktopファイルの内容も含まれています。

Ubuntu 18.04 LTS(Gnome)の下で、私にとって仕事はうまくいきます。

1
Dɑvïd

私はBaseXの大ファンです。これにはインポート機能があるようです。

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


一見、Webアプリケーションを使用する方が簡単だと指摘するかもしれません。

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

これは、Googleシートで機能するブラウザのプラグインまたは拡張機能に相当します。

Aptを介して利用できるはずの、一見単純なユーティリティであるため、あなたの痛みを感じます。

0
Thufir

あなたか誰かがPythonでコードを書くことをお勧めします。 Pythonは簡単に学習して問題を解決できます。 CSVモジュールXMLモジュール の両方があります。私の提案では、XML要素に独自の名前を付けるか、他の複雑な要件(最後のCSV列を最後から2番目の列の属性に変換するなど)が必要になる場合があることを考慮しています。

Pythonに関するオンラインのチュートリアルが山ほどあります。

0
Stefano Mtangoo