XML整形
XML文書の内容を変えずにインデントまたは圧縮します。処理はすべてブラウザ内で行います。
すべてブラウザ内で動作します。アップロード、記録、保存は一切行いません。
XML文書を貼り付けて、読みやすくしましょう。インデントを付けることも、全体を1行に戻すこともできます。それ以外は何も変えません。XMLでは、整形ツールが整えたくなるもののほとんどがデータだからです。
仕組み
HTMLの整形ツールは、ブロック要素の間なら自由にインデントできます。そこではブラウザが空白を一切表示しないからです。XMLにはブロック要素もインライン要素もありません。XMLはあなたの要素が何を意味するのかを知らず、テキストを含む要素の中の空白はそのテキストの一部です。
そのため、ここでのルールは限定的で、それがこのツールのすべてです。要素がインデントし直されるのは、ほかの要素を含み、かつ自身のテキストを持たない場合だけです。それ以外のもの——テキスト、混在コンテンツ、CDATA、空白だけを含む末端要素、xml:space="preserve"が指定された要素——はバイト単位でそのまま返されます。
開始タグの中の空白は決してデータではないため、属性間の連続した空白は1つにまとめます。引用符の中身はそのまま残します。属性の並べ替え、名前の変更、引用符の付け直しは行いません。
これらの処理の前に、タグの対応が取れている必要があります。終了タグが一致しない文書や、要素を開いたまま閉じていない文書は、整形せずに拒否します。壊れたマークアップをインデントする整形ツールは、正しく見えるのに新たな形で間違ったものを返すことになるからです。
例
| ケース | 入力 | 結果 |
|---|---|---|
| 混在コンテンツはそのまま残る | <p>Paper <em>and</em> cloth.</p> | <p>Paper <em>and</em> cloth.</p> |
| 空白を含む末端要素は空白を保持する | <value> </value> | <value> </value> |
| 属性の間は空白1つになる | <a b="1" c="2"/> | <a b="1" c="2"/> |
よくある質問
なぜ文書が1行で返ってきたのですか?
ルート要素が、要素に加えてテキストも含んでいるためです。これは混在コンテンツで、その中の空白はデータです。インデントすれば、元の文書になかった文字を挿入することになります。整形ツールは正常に動作しています。見た目を良くするために内容を書き換えることを拒んでいるのです。
XMLをスキーマに照らして検証しますか?
いいえ。インデントに必要なタグの対応だけを確認し、それ以上は行いません。XSDに照らして文書を検証するには、XMLバリデーターを使ってください。
ブラウザの外に何か送信されますか?
いいえ。整形ツールはお使いの端末上で動くJavaScriptです。文書はどこにも送信されません。空白を変えるために貼り付けるファイルにとって、それが唯一まともな設計です。
なぜ属性がそれぞれ別の行にならないのですか?
開始タグには示すべき入れ子構造がないからです。1つのタグを複数行に分けるのは構造ではなく好みの問題で、この整形ツールは正解が1つしかない処理だけを行います。
「1行にまとめる」モードでは何が削除されますか?
要素間の空白だけです。インデントなら空白を追加していたのと同じ場所です。テキスト、CDATA、コメントには手を触れないため、文書の内容は以前とまったく同じです。
知っておきたいこと
- レイアウトを整えるだけで、パーサーではありません。名前空間の解決、エンティティの展開、値の正規化は行わず、スキーマによる検証もしません。
- 文字コードはブラウザのものを使います。文書冒頭の宣言は、何が書かれていてもそのまま引き継がれます。