XMLをExcelに変換
XMLのエクスポートやフィード、データファイルを書式付きのExcelシートに。繰り返すレコードを自動で検出し、属性や入れ子の要素を列として並べます。ファイルは保存されません。
- 保存しません
- 順番待ちなし
- 登録不要・透かしなし
使い方
XMLを追加
.xmlファイルをドロップするか、XMLを貼り付けます。Excel独自のXML Spreadsheet 2003ファイルにも対応しています。
レコードを選ぶ
product、item、rowのような繰り返し要素が自動で選ばれます。ファイル内のほかの表もすべて一覧表示され、リアルタイムでプレビューできます。
ダウンロード
列ごとに数値や日付の型が設定され、太字でフィルターをかけられる見出し行が付いた.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つ貼り付けるだけで、訪問者がそのページ上でツールを使えるようになります。