コンテンツへスキップ

XMLをExcelに変換

XMLのエクスポートやフィード、データファイルを書式付きのExcelシートに。繰り返すレコードを自動で検出し、属性や入れ子の要素を列として並べます。ファイルは保存されません。

  • 保存しません
  • 順番待ちなし
  • 登録不要・透かしなし

使い方

1

XMLを追加

.xmlファイルをドロップするか、XMLを貼り付けます。Excel独自のXML Spreadsheet 2003ファイルにも対応しています。

2

レコードを選ぶ

product、item、rowのような繰り返し要素が自動で選ばれます。ファイル内のほかの表もすべて一覧表示され、リアルタイムでプレビューできます。

3

ダウンロード

列ごとに数値や日付の型が設定され、太字でフィルターをかけられる見出し行が付いた.xlsxを保存できます。

ツリー構造から行を見つけ出す

XMLには表という概念がないため、まずどの要素がレコードなのかを特定する必要があります。確実な手がかりは繰り返しです。同じ名前の子要素を多数持つ親要素は、ほぼ間違いなくレコードの一覧であり、その子要素が持つ子要素や属性が列になります。エクスポート、フィード、APIのレスポンス、設定のダンプなど、データ用のXMLはどれも同じ作りをしているため、この方法は大多数のファイルで機能します。

属性と子要素はどちらも列に変換されます。XMLには同じことを表す方法が2つあり、システムによって選び方が違うため、これは欠かせない処理です。あるエクスポートはid="42"を属性として書き、別のものは<id>42</id>を要素として書き、3つ目は同じ文書の中で両方を使います。表にとってこの違いは関係なく、利用者が気にする必要もありません。そのためどちらも列として取り込み、同じ名前が両方の形で現れても衝突しないよう、属性には印を付けています。

2階層以上の入れ子は、入れ子のJSONと同じように要素名をつなげて平坦化します。1つの注文に3行の明細があるように、レコードの中に繰り返しの子要素がある場合、周囲のデータをすべて重複させない限り表の行としては表現できないため、繰り返しの値はそのセルの中に残します。列名からは名前空間を取り除きます。 ns2:customerNameという列名はスプレッドシートでは誰の役にも立たないからです。値そのものには手を加えません。

文章中心のXMLには検出すべき表がなく、うまく変換できません。 XHTMLページ、DocBookの記事、ePubの章、SVGの図は、データセットではなく文書です。構造は本来入れ子で不規則なものであり、行を作るための繰り返しレコードがありません。変換すれば何かしらの結果は出ますが、役に立つものにはなりません。このページはデータ用のXMLのためのもので、この違いを理解しておくほうが、どんな調整よりも時間の節約になります。

ほかの目的には

構造が分かっているなら、推測させるのではなく、狙って取り出しましょう。xmlstarlet sel -t -m "//order" -v "@id" -o "," -v "customer" -n data.xmlはXPath式で必要なフィールドだけを正確に抜き出し、xqはjq風の構文で同じことができます。たまたまうまくいく変換と、パイプラインに組み込める変換の違いはここにあります。

非常に大きなファイルには、ここでの方法はどれも向いていません。文書は丸ごとメモリに読み込まれ、ツリーとして解析されたXMLは通常ファイルサイズの数倍のメモリを使います。Pythonのiterparseや各言語のSAXといったストリーミングパーサーなら、数GBの文書でも一定のメモリで処理でき、数百MBを超えるなら現実的な方法はこれだけです。

よくある質問

XMLのどの部分が表なのか、どうやって判断していますか?

同じ親要素の下で繰り返される要素をレコードとみなします。<catalog>内のすべての<book>や、RSSチャンネル内のすべての<item>がその例です。各グループをレコード数とフィールド数で評価して最適なものを選び、ほかのグループもワンクリックで切り替えられます。

属性や入れ子の要素はどうなりますか?

それぞれがパスを名前にした列になります。id属性はid、<author><name>はauthor/name、<price currency="EUR">はpriceとprice/@currencyになります。1つのレコード内で繰り返されるフィールドは、1つのセルにまとめるか、番号付きの複数の列に分けます。

ExcelのXML Spreadsheet 2003ファイルも開けますか?

はい。これらのファイルは自動で認識され、数値・日付・テキストをそのまま保ってシートごとに変換されます。

注文とその明細のように、ファイルに複数の表がある場合は?

繰り返しグループはそれぞれ個別に選択できます。各注文内の明細のような入れ子の表には親レコードを示す列が付くので、2つのシートを突き合わせられます。

ファイルはどこかに保存されますか?

いいえ。XMLの解析とブックの作成はこのページ上で行われ、何も保存されません。

出所の分からないXMLを開いても安全ですか?

はい。ファイルはブラウザのXMLパーサーで読み込まれます。このパーサーは外部エンティティやDTDを読み込まず、ファイル内の何かを実行することもできません。

ご注意: XHTMLページやDocBookの記事のように、データではなく文章が中心の文書には検出すべき表がなく、うまく変換できません。約100 MBを超えるファイルは、ブラウザのメモリが足りなくなる場合があります。

このツールをあなたのサイトに設置

ブログ、授業のページ、ヘルプ記事などに無料で設置できます。コードを1つ貼り付けるだけで、訪問者がそのページ上でツールを使えるようになります。