100% ローカル — データがブラウザの外に出ることはありません

XMLをCSVに変換|要素ひとつが表計算ソフトの一行になる形で

繰り返されたXML要素を表の行に変換します。子要素の名前がそのまま列の見出しになるので、表計算ソフトで開いて並べ替えても、スクリプトに渡してもそのまま使えます。

高速 プライベート Cookieゼロ
区切り文字

XML 入力

CSV 出力

このツールの動作

繰り返されている要素を見つけ、その一つ一つを行にします。

<orders>
  <order id="1"><customer>Ada</customer><total>42</total></order>
  <order id="2"><customer>Alan</customer><total>17</total></order>
</orders>
customer,total,id
Ada,42,1
Alan,17,2

キーが一つだけの外側の包みは自動でたどるので、<orders><order>… に設定は要りません。包みが自分の属性を持つ場合——<orders count="2">——もたどります。その属性は集合についての記述であって行のものではないため、列にはなりません。行に付いた属性は列になります。

属性は列になる

属性に入った識別子も、ほかと同じデータです。@_id は id 列になります。

接頭辞が残るのは一つの場合だけです。同じ名前の子要素がすでにあるときです。<row id="1"><id>x</id></row> は id と @_id の二列になります。中身は別のものであり、一つにまとめれば片方が消えるからです。表を要素だけから作りたいときは、切り替えで属性を丸ごと落とせます。

一行でも表である

記録が一つだけの書き出しも、ほかと同じように変換します。以前はそうでなかったので、書いておく価値があります。XML から JSON への変換は、繰り返されていない要素を配列ではなくオブジェクトにします。配列を必須にしていたために、ごく普通の文書が拒否されていました。

テキストしか含まない根要素は、今も拒否します。値が一つあるだけでは表ではなく、そうでないふりをしても誰の役にも立ちません。

形の揃わない行

見出しは、現れたすべての和集合を初出順に並べたものです。列が欠けている行には空のセルが入ります。

<r><row><a>1</a></row><row><a>2</a><b>3</b></row></r>
a,b
1,
2,3

不揃いな書き出しは普通のことです。余分な列を捨てたり、その列を持たない行を捨てたりすれば、整理のためにデータを失います。

セルが持てないもの

セルが持てるのは一つの値です。要素が部分木を含むときは、勝手に作った列名へ散らすのではなく、その部分木をセルの中に JSON として書きます。見た目は悪いものの正直です。何も失われず、そこに何があったかがそのまま見えます。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

id 属性はどこへ行ったのですか。以前は消えていました。
今は列になります。`<row id="1">` は、子要素から来る列の隣に `id` 列を作ります。属性に入った識別子もデータであり、黙って落とすのはこのツールの実際の欠陥でした。このページを書く過程で見つけたものです。同じ名前の子要素がすでにある場合、属性は `@_` の接頭辞を保ち、二つの列は別のままになります。
なぜ入れ子の要素はセルの中に JSON として出るのですか。
CSV のセルが持てるのは一つの値で、その要素が持っているのは部分木だからです。`親.子` という列に平坦化すれば、受け取る側が同意していない命名規約を発明することになります。セルの中の JSON は、少なくとも曖昧でなく、元に戻せます。本当の列が欲しければ、変換の前に平坦化してください。
行ごとに子要素が違います。どうなりますか。
見出しは、現れたすべての要素と属性の和集合で、順序は初出順です。欠けている行にはその列に空のセルが入ります。不揃いだからといって捨てるものはありません。一部の記録にだけミドルネームがある書き出しは普通のことで、誤りではありません。

関連ツール