JavaScriptでXMLを綺麗にフォーマットする方法

プログラムで扱われるXMLは見にくい(ことがある)。プログラム内では改行はインデントなんて必要ないから大体下のようなそっけないものになっていることが多い。

<user><name>hironemu</name><addresses><address><zip>xxx-xxxx</zip><city>Chofu</city></address><address><zip>yyy-xxxx</zip><city>Shinjuku</city></address></addresses></user>

まぁ、ちょっと気のきいたライブラリだったらPrettyPrintするためのオプションがあったりするだろうけど、そうじゃない場合も多々ある。以下のサイトに簡単にXMLを整形してくれる方法が紹介されているのを見つけたので、忘れない様にメモ!しかも、RubyXMLをフォーマットするサンプルもある(こっちメインっぽいが)
Recent codes - RefactorMyCode.com

JavaScriptで試してみた。

<html>
<head>
<script language="javascript">

window.onload = function() {
	var xml = '<user><name>hironemu</name><addresses><address><zip>xxx-xxxx</zip><city>Chofu</city></address><address><zip>yyy-xxxx</zip><city>Shinjuku</city></address></addresses></user>';
	document.getElementById('xml_print').value = format_xml(xml);
}
// この辺に、上記サイト()の
// format_xmlとspaces関数をコピっておく。ここでは省略
// ...

</script>
</head>
<body>
<textarea rows="15" cols="50" id="xml_print"></textarea>
</body>
</html>

上記のインデントされていない見にくいXMLをformat_xmlで整形した結果、↓こんな見やすいXMLになりましたよ。いや、便利。

<user>
    <name>hironemu</name>
    <addresses>
        <address>
            <zip>xxx-xxxx</zip>
            <city>Chofu</city>
        </address>
        <address>
            <zip>yyy-xxxx</zip>
            <city>Shinjuku</city>
        </address>
    </addresses>
</user>