色々なコマンドラインでの XML の整形方法

XML が一行になっているととにかく見にくい。 ところが今日 @mamoruk さんにお会いしたとき、一行の XML をコマンドでぱぱっとツリー状にして編集していた。調べてみるとけっこう方法があるようだ。せっかくブログを書くいい機会なので書いておこうと思う。

つまり、

<?xml version="1.0" encoding="UTF-8"?><mongo><a>T</a></mongo>

という xml

<?xml version="1.0" encoding="UTF-8"?>
<mongo>
  <a>T</a>
</mongo>

という風にしたい。

tidy を使う
tidy --indent-cdata true -xml -utf8 -i hoge.xml 

こちらのブログに詳しく書かれている。
tidy は本来 HTML を整形するツールのようだ。

xmllint を使う
xmllint --format hoge.xml

こちらは短い。
xmllint はコマンドラインの xml 編集のツールらしい。

Emacs での整形

Emacssgml-mode(xml-mode ではできないのかな?)で、全選択してから M-x sgml-pretty-print をするとインデントされる。一部だけ選択してそこだけインデントをするということもできるので便利そう。

というわけでざっと見たが、楽そうな xmllint と、 Emacssgml-pretty-print を使おうと思う。


追記:

xmlstarlet での xml の整形

xml startlet というものを教えてもらった。 XPath の検索など高度なことができるようだが、とりあえず記事の主題の整形のコマンドは

xmlstartlet fo hoge.xml

これでできる。書いた中では1番便利に見える。
Web の資料だと xmlstartlet が xml となっているものばかりだが、 apt-get で入れたからかコマンド名が違うようだ。