CSV to XML — CSV データを XML 形式に変換
CSV データを XML に変換します。ルート要素と行要素名は設定可能で、属性マッピングも選択できます。すべてブラウザ内で動作するため、アップロードは不要、制限もありません。
CSV to XML は昔からあるデータ変換作業のひとつで、XML が SOAP API から RSS フィード、Office 文書まであらゆるもののデフォルト交換形式だった時代にまで遡ります。変換そのものは機械的です。CSV の各行が <row> 要素になり、各列ヘッダーが子要素(または属性)の名前になり、各セルの値がテキスト内容になります。ただし、変換先によっては出力形式の設定が重要になります。属性形式(<row name="Alice" age="30"/>)を期待する XML スキーマもあれば、子要素形式(<row><name>Alice</name><age>30</age></row>)を期待するもの、特定のルート要素名を要求するもの、名前空間が必要なものもあります。このツールではそうした選択肢を直接指定できるので、出力を一発で宛先スキーマに合わせることができます。
変換において「あまり自明ではない」のは XML のエスケープ処理です。CSV のセルには <、>、& やクォート文字など、XML において特別な意味を持つ任意の文字を含めることができます。各セルをそのまま <name>VALUE</name> のように文字列連結しただけだと、値に < が含まれている場合に壊れた XML が生成され、パーサーはタグが閉じられていないと判断して失敗します。このツールは XML で意味を持つ 5 文字(<、>、&、'、")を自動的にエスケープし、任意の XML パーサーが元の CSV の値をそのまま読み戻せる出力を生成します。CDATA セクションは使用されません。エスケープの失敗に対する単なる回避策であり、適切なエスケープの代替にはならないためです。
最後に受け渡し時のアドバイスです。受け取り側が XML を期待する SOAP や REST API である場合は、生成前にスキーマの element-vs-attribute の規約を確認してください。誤った選択をすると、パースはできるが検証ではじかれる出力が生成されます。受け取り側がリレーショナルデータベースであれば、CSV-to-XML の方向は誤りです。ほとんどのデータベースは bulk import で直接 CSV を受け付けます。受け取り側がフィード(RSS、Atom、sitemap)の場合は、XML の種類が固定されているため、汎用的な CSV-to-XML ツールよりもフィード専用の生成器を使う方がよいかもしれません。このツールは、スキーマがシンプルで受け取り側が汎用 XML パーサーであるような、アドホックな XML 出力に適しています。
使い方
CSV データを貼り付ける
CSV を入力エリアにドロップするか、.csv ファイルを読み込みます。ツールは区切り文字(カンマ、セミコロン、タブ)と UTF-8 BOM の有無を自動検出します。デフォルトでは 1 行目がヘッダーとして扱われます。
XML 構造を設定する
ルート要素名(コンテナ、デフォルトは `<rows>`)と行要素名(各レコード、デフォルトは `<row>`)を指定します。必要に応じて、ヘッダー列を子要素ではなく XML 属性にマッピングすることもできます。
XML をコピーまたはダウンロードする
XML をクリップボードにコピーするか、.xml ファイルとしてダウンロードします。出力は標準の `<?xml version="1.0"?>` 宣言と UTF-8 エンコーディングを含む、自己完結した単一の XML ドキュメントです。
よくある質問
任意の区切り文字を使用できますか?
はい — 自動検出は最初の数 KB を検査し、カンマ、セミコロン、タブ、パイプのいずれかを選択します。標準的でない入力で自動検出が誤った判定をした場合は、設定から区切り文字を強制指定できます。
属性と子要素の違いは何ですか?
属性ベースの行は `<row name="Alice" age="30"/>` のようになります。子要素ベースの行は `<row><name>Alice</name><age>30</age></row>` のようになります。属性はよりコンパクトで、子要素は後からネストデータを拡張しやすいという特徴があります。
XML の特殊文字はどのようにエスケープされますか?
ツールは `<`、`>`、`&`、`'`、`"` を自動的にエスケープします。CSV のセルに含まれる `A & B` は XML では `A & B` となり、任意の XML パーサーは元の `A & B` として読み戻します。CDATA セクションは使用されません。エンティティエスケープが標準的な手法です。
スキーマ参照を追加できますか?
はい — 「XSD reference」フィールドで、ルート要素に `xsi:noNamespaceSchemaLocation` 属性を追加して .xsd ファイルを指定できます。参照は追加されますが、検証は行われません。スキーマ準拠が重要な場合は、別の XML バリデーターと組み合わせて使用してください。
1 行目はスキーマになりますか?
はい — CSV の 1 行目がフィールド名として扱われます。各フィールド名は、各行内の XML 要素(または属性)になります。CSV にヘッダーがない場合は、「no header」オプションをオンにすると、フィールド名は汎用的な `field1`、`field2` などの名前になります。
制限事項
- ネスト構造には対応していませんCSV はフラットな表形式です。出力される XML もフラットで、各行は同じフィールドを持ち、ネストされたオブジェクトや配列を表現する手段はありません。階層データが必要な場合は、JSON または YAML を起点にしてください。
- デフォルトでは名前空間がありません出力には XML 名前空間が使用されません。宛先のスキーマが名前空間を必要とする場合(SOAP、RSS、Atom フィードなど)、変換後に手動で追加してください。ツールは選択された名前でルート要素にラベルを付け、任意の名前空間プレフィックスを受け入れます。
- DTD や XSD は生成されませんこのツールは Document Type Definition や XML Schema を生成しません。スキーマが必要な場合は、CSV ヘッダーから手動で導出するか、別のツールでサンプル XML から XSD を生成してください。
プラットフォーム別の注意点
- macOS
- コマンドラインの場合は、`xmlstarlet` を使って小さなスクリプトで CSV を XML に変換できます。1 回限りの変換であれば、Homebrew で xmlstarlet をインストールする手間をかけるより、ブラウザ版のツールの方が手軽です。
- Windows
- PowerShell の `Import-Csv` と `Export-Clixml` で、PowerShell 専用のワークフローには十分対応できます。ブラウザ版のツールは、PowerShell に限らず任意の XML パーサーが読み取れる、クロスプラットフォームの XML を出力できる点が強みです。
- Linux
- 最も近い CLI の代替は `python3 -c "import csv, xml.etree.ElementTree as ET; ..."` です。わずか 5 行のスクリプトで変換できます。チャット、メール、ドキュメントページから貼り付けた内容をその場で変換したい場合は、ブラウザ版のツールが手軽です。
- Web
- 完全にクライアントサイドで動作します。ページの読み込みが完了すればオフラインでも使用できます。出力される XML は移植性が高く、任意の XML パーサー、XSLT トランスフォーマー、スキーマバリデーターに依存なしで渡すことができます。