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


8

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

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


分からない。あなたが言及する3つのフォーマットはプレーンテキストファイルです---違いは内容です。そしてスコープ。例を追加していただけませんか?
Rmano 2015

1
再開するための投票。私はこれをかなり簡単で答えやすいと
思い

1
変換できるソフトウェアを尋ねただけなので、私はRinzwindをサポートしています。
Vitor Mazuco、2015

回答:


7

上のコミュニティサイトが変換に呼ばれるコマンドラインツールへのリンクですcsv2xml。メンテナンスされていないため、別のオプションを選択することをお勧めします。

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

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


1
最初のリンクの参照で少し更新しました。Altova(altova.com)と呼ばれる商用製品もあります。
Rinzwind 2015

10

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ファイルの標準ですが、入力ファイルの形式に合わせて必要に応じて変更できます。

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

-a arry引数は(という名前の配列にあなたのファイルの各列を配置しますarry)。この例の列は、名前、年齢、国です。つまり、コンマの間の値です。したがって、行の各列は配列に格納されます。

次に、必要なテキストxmlが値の周りにラップされ、そのxml行がで出力ファイルに追加されますecho


@chaskes、行while IFS=$',' read -r -a arry で使用されているオプションを説明する場合、それは別の人にとって有用です。ありがとう。
alhelal 2017年

@BandaMuhammadAlHelal完了しました。
1

二重引用符で囲まれたフィールド内にあるカンマをどのように処理しますか?以下のように"Somename, Jack"の代わりにJack、入力ファイル内の?
muk.li

1
@ muk.li入力フィールドのセパレーター(通常はコンマ)は、IFS = $ '、'で始まる行でマークされます。セパレーターがアスタリスクだとしましょう。これを$ '*'に変更するだけです。したがって、あなたの場合、それは$ '"'(一重引用符、二重引用符、一重引用符)である必要があります。これはうまくいくはずですが、シェルでの引用はトリッキーになる可能性があり、私はそれをテストする機会がありませんでした。
追う

1

CSVからXMLへの変換の課題に対するかなりユーザーフレンドリーな(つまり、私のような多くの人にとっては簡単な)ソリューションは、この機能が組み込まれた優れたクロスプラットフォーム XMLエディターを使用することです。(私はUbuntuとMac OSX 10.10.5の両方で使用しました。Windows実行可能ファイルも持っています。)

XMLSpear

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

ここに画像の説明を入力してください

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

エディターとして、他にも多くのウェルカム機能があります(詳細は上記のリンクに記載されています)。そのライセンスについての言及はありませんが、これは「README」に含まれています。

XMLSpearは個人使用のための無料ソフトウェアです。
フィードバックをxmlspear@donkeydevelopment.comまたはフォーラムに送信してくださいhttp://donkeydevelopment.com/forums

商用利用はdonkeydevelopmentの承認が必要です。
「ライセンス要求」という件名の電子メールをxmlspear@donkeydevelopment.comに送信してください。

readmeには、.desktopファイルのコンテンツも含まれています。

Ubuntu 18.04 LTS(Gnome)のもとでうまく機能します。


0

私はBaseXインポート機能を持っていると思われるその大ファンです:

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


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

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

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

一見シンプルなユーティリティなので、aptから利用できるはずです。


0

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

Pythonに関するオンラインのチュートリアルがたくさんあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.