8,902 views
この記事は最終更新から 974日 が経過しています。
1. やりたいこと
PHPや Pythonで WEBページを出力する際に、HTML文のインデントなどを気にしないことが多い。
でも…
出力された HTML文の中身を確認したいとき、見やすくインデントされていてほしい。
そこで…
xmllint コマンドで整形する。
2. やってみる
1) まずは基本、HTML文を整形する。
こんな HTML文があったとする。
tableが 1行に書かれていて見づらい。
<table class="myxyz"><tr><th>No.1</th><td>asdfghjkl</td></tr><tr><th>No.2</th><td>qwertyuiop</td></tr></table>
xmllint コマンドで一発成型する。
xmllint --format tmp.html
本来 XML用のコマンドなので、先頭行に xml version と付けられてしまうので注意する。
<?xml version="1.0"?> <table class="myxyz"> <tr> <th>No.1</th> <td>asdfghjkl</td> </tr> <tr> <th>No.2</th> <td>qwertyuiop</td> </tr> </table>
どうしても 1行目を消したければ sedコマンドなどで除去すればよい。
xmllint --format tmp.html | sed -e "s/<?xml.*?>//"
ここで使用した正規表現の意味は以下の通り。
<?xml これから始まり、
.* 文字がいくつか続き、
?> これで閉じられている区間を消去する。
or 行削除コマンドで削除してもよい。
xmllint --format tmp.html | sed -e "/^<?xml/d"
また、-html オプションで 1行目を消せるが、余計なタグが付けられてしまうし、インデントされない。
xmllint -html --format tmp.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html><body><table class="myxyz"> <tr> <th>No.1</th> <td>asdfghjkl</td> </tr> <tr> <th>No.2</th> <td>qwertyuiop</td> </tr> </table></body></html>
2) 出力ファイル名を指定する。
出力ファイルは -o オプションで指定する。
xmllint --format tmp.html -o out.html