XML to CSV — ブラウザで XML データを CSV 表に変換
XML データを CSV 表に変換します。ネストされた要素、属性、繰り返される行に対応。区切り文字は設定可能で、すべてブラウザ内で完結します。
XML と CSV はデータフォーマットの複雑さというスペクトラムの両端にあり、その相互変換は「何を残し、何をフラット化するか」という判断を伴います。XML はネストされたツリーや名前空間付き属性、混合コンテンツを表現でき、XSD 注釈を通じてデータ型を運ぶこともできます。CSV は行と列だけで構成される、文字列のフラットなグリッドに過ぎません。XML から CSV への変換は常に簡略化です。ツリー構造は表に折りたたまれ、階層関係はドット記法の列名になり、豊富な型システムはただのテキストに崩壊します。その簡略化こそが目的です。スプレッドシート、データベース、分析ツールは CSV をネイティブに扱い、複雑な XML API レスポンスからピボットテーブルに至る道のりは必ず CSV を通ります。
あらゆる XML→CSV 変換で中心となる判断は、どの XML 要素を行にするかという点です。多くの XML ドキュメントには、まさに適切なレベルに繰り返し要素があります。<items> の中の <item>、<records> の中の <record>、<rows> の中の <row> です。ただし複数の階層で繰り返しが起きる XML もあります。<catalog> に <book> が含まれ、各 <book> の中に <author> がネストされている場合、書籍のリストにしたいのか著者のリストにしたいのかによって、行として選ぶべき要素は変わります。本ツールの自動検出はデフォルトで最も深くネストされた繰り返し要素を選ぶため、フラットなデータ出力ではほぼ正解です。XML の構造と意図する出力形状が合わない場合は、パスのドロップダウンで別のレベルを選べます。
最後に引き渡しについて補足します。出力 CSV の区切り文字を変える必要がある場合(ヨーロッパ向け Excel ではセミコロン、クリップボード貼り付けにはタブ、レガシー ETL パイプラインにはパイプ)は、ダウンロード前にお好みで区切り文字を設定で切り替えてください。さらにこの CSV を別の形式に変換する必要がある場合——API 向けに JSON、設定ファイル向けに YAML、レポート向けに HTML 表——本サイトの関連ツールが CSV を直接入力として受け付けます。行き先がリレーショナルデータベースであれば、ほとんどのデータベースは COPY や LOAD DATA コマンドで中間変換なしに CSV を取り込めます。
使い方
XML を貼り付けるかドロップする
XML の文字列またはファイルを入力欄にドロップします。パーサーが XML を読み取り、繰り返される要素を行として識別します。要素名が列ヘッダーになり、ネストされた子要素はドット記法の列にフラット化されます。
行として使う繰り返し要素のパスを選ぶ
デフォルトでは、ツールが最も深くネストされた繰り返し要素を行テンプレートとして自動選択します。XML に複数の候補レベルがある場合(例:`<orders><order>...</order></orders>`)、ドロップダウンから適切なパスを選んでください。
CSV をコピーまたはダウンロードする
デフォルトの区切り文字はカンマです。設定でセミコロン、タブ、パイプに切り替えることができます。出力される CSV は UTF-8 with BOM なので Excel へのインポートもスムーズです。.csv としてダウンロードするか、クリップボードにコピーしてください。
よくある質問
XML の中で何が『行』要素と見なされますか?
コンバーターは繰り返される子要素を探します。つまり、同じタグ名を持つ兄弟要素が少なくとも 2 回現れるものです。`<books><book>...</book><book>...</book></books>` のような構造では `<book>` が行要素になります。複数の階層で繰り返している場合は、パスのドロップダウンから意図したレベルを選んでください。
CSV 出力では XML 属性はどう扱われますか?
行要素の XML 属性はデフォルトで `@` を接頭辞とする列になります(例:`<book id="123">...</book>` なら `@id`)。ネストされた子要素の属性は、その子要素のドット記法パスにフラット化されます。設定で属性の抽出を無効化することもできます。
深くネストされた XML 構造はどうなりますか?
ネストされた要素はドット記法の列名にフラット化されます。`<person><address><city>Berlin</city></address></person>` は `address.city` という列になり、値は `Berlin` になります。ネストされた要素の配列は、親要素が繰り返している場合は複数行に展開され、そうでない場合は 1 つのセルに連結されます。
空要素や欠落要素に独自の値を入れられますか?
はい。『欠落ノードの既定値』設定で空のセルを埋めることができます。空文字列(デフォルト)、`NULL`、`N/A`、または任意のカスタムプレースホルダーを選べます。すべての行が同じネスト構造を持つわけではない場合に便利です。
制限事項
- XML 名前空間は解決しないXML 名前空間(`<ns:book xmlns:ns="...">`)はタグ名の列ヘッダーにそのまま含まれます。名前空間プレフィックスは完全な URI には解決されないため、列名が冗長になることがあります。
- 混合コンテンツは近似処理テキストと子要素の両方を持つ要素(XHTML でよく見られる混合コンテンツ)は、テキスト内容が抽出され、埋め込まれたタグは無視されます。構造は保持されません。
- スキーマ検証や型推論はしないすべてのセル値は文字列として扱われます。数値型、日付型、ブール型の推論は行いません。インポート後にスプレッドシート側で型変換を行ってください。
プラットフォーム別の注意点
- macOS
- Numbers と Excel for Mac は UTF-8 BOM 付き CSV をクリーンにインポートします。xmlstarlet や Python でスクリプトを書くより手軽な、スポット的な XML→CSV 変換にはブラウザツールが向いています。
- Linux
- CLI での同等手段は `xmlstarlet sel -t -m '//row' ...` にテンプレート出力を組み合わせる方法です。API レスポンスやチャットから貼り付けた XML をその場で変換するような用途には、ブラウザツールの方が手軽です。
- Web
- 完全にクライアントサイドで動作します。ページの読み込み後はオフラインでも動作。解析された XML がブラウザの外に出ることはなく、どのサーバーにもアップロードされません。