(96) xmllintコマンドでHTML文を整形

投稿者: | 2018年10月4日

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

カテゴリー: XML

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です