?

Log in

No account? Create an account

Previous Entry | Next Entry

Порой требуется взять (x)html страницу и получить отформатированный файл. Возник вопрос, как из исходной, порой минимизированный страницы, получить нормально отформатированный файл? Оказывает, что вопрос решаем утилитой xmllint:

xmllint --format --recover --encode utf8 --output output_file.html input_file.html



С ходу я делал так:

xmllint --format --recover --output output_file.html input_file.html

Проблема только в том, что вся кириллица в выходном файле кодируется в hexadecimal формат. Т.е. слов "Все" кодируется как Все. Для xmllint можно воспользоваться опцией html, но тогда утилита перестает форматировать выходной файл. Попытка добиться сочетания опций (html, xmlout, nowrap, noent) с получением требуемого результата ни к чему не приводили (encode именно в таком виде догадался применить только после ascii2uni варианта). Поэтому возник вариант получить нормально отформатированный документ, а после этого конвертировать в нормальные символы все hexadecimal. В итоге отыскался полезный утиль ascii2uni (в debian репозитории его нет) и получился вариант:

xmllint --format --recover input_file.html | ascii2uni -a H > output_file.html

Хотя сейчас конечно использую с encode опцией без ascii2uni. Утиль довольно любопытный, думаю может пригодится в других случаях.

P.S. По умолчанию xmllint для форматирования использует два пробела. Любителям tab-ов нужно установить XMLLINT_INDENT переменную окружения. Можно командой export XMLLINT_INDENT="Ctrl+v,Ctrl+i" (export XMLLINT_INDENT="\t" не сработает), а еще лучше прописать это в ~/.bash_profile

Метки: