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

XMLをYAMLに変換|タグの山が人にも読める字下げになります

XMLをYAMLに変換します。木構造がタグではなく字下げになり、閉じタグを目で追わなくても中身がすぐ読めます。設定ファイルとして手で直すのも、ぐっと楽になります。

高速 プライベート Cookieゼロ
インデント

XML 入力

YAML 出力

このツールの動作

文書は YAML のマッピングになります。形は XML から JSON への変換と同じで、属性は @_ を付けたキーに、テキストと属性を両方持つ要素のテキストは #text に、要素が繰り返されればシーケンスになります。

<user id="1"><name>Ada</name></user>
user:
  name: Ada
  "@_id": "1"

そのキーが引用される理由

この対応づけが作る文字のうち二つは、YAML で予約されています。

@ は素のスカラーを始められません。仕様が予約しているからで、@_id は引用が必須です。# はコメントを開くので、#text を素で書けば行の残りが消えます。引用符は飾りではなく、それらを書く唯一の方法です。

一部の値も引用される理由

YAML には広く使われている版が二つあり、素の語の意味について一致していません。

素で書くとYAML 1.2 の読みYAML 1.1 の読み
NO文字列 NO偽
yes文字列 yes真
12:30文字列 12:30750(六十進)
2026-01-01文字列日時

YAML 1.2 は JavaScript のライブラリの多くが書く版です。YAML 1.1 は PyYAML が実装する版で、世界の非常に多くの場所で実際に YAML を読んでいるのは PyYAML です。

つまり素で書かれた国コード NO は、Python では False になります。これが「ノルウェー問題」で、ファイルの中にそれを知らせるものはありません。文書はどちらでも妥当なまま、意味だけが変わります。

このツールは、その曖昧なスカラーだけを引用符で囲みます。本物の真偽値は true のまま、本物の null は null のまま、普通の語は素のままです。出力は妥当な YAML 1.2 であり、どちらの読み手も同じ値を得ます。

複数行のテキスト

改行を含むテキストはブロックスカラーになります。

a: |-
  一行目
  二行目

これは YAML がまさにこのために用意した読みやすい形で、エスケープなしで往復します。

プライバシー

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

よくある質問

なぜ一部のキーだけ引用符が付くのですか。
この変換が作る文字のうち二つを YAML が予約しているからです。`@` は素のスカラーの先頭に置けません。仕様が将来の用途のために予約しています。ですから属性のキー `@_id` は引用が必要です。`#` はコメントを開始するので `#text` も同様です。それ以外は素のまま書きます。
なぜ NO に引用符が付くのですか。素のままにしたいのですが。
素のままでは、多くの読み手にとって文字列 `NO` でなくなるからです。PyYAML が実装する YAML 1.1 は、素の `NO` を真偽値の偽として読みます。有名な「ノルウェー問題」です。引用符は二文字の費用で、国コードを国コードのまま保ちます。
要素が一つのときにリストを得るにはどうしますか。
文書だけからは得られません。`<item>` が一つある状態と、要素数 1 のリストは XML では同じ書き方になり、区別できるのはスキーマだけです。一つならマッピング、二つ以上ならシーケンスになります。どちらでもリストが必要なら、受け取る側で正規化してください。

関連ツール