9,904 views
この記事は最終更新から 1400日 が経過しています。
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
アクセス数(直近7日): ※試験運用中、BOT除外簡易実装済2025-12-09: 0回 2025-12-08: 1回 2025-12-07: 1回 2025-12-06: 4回 2025-12-05: 4回 2025-12-04: 0回 2025-12-03: 2回