Прошло много времени, но я помню, как пытался использовать HTMLTidy для подготовки HTML-файлов для XSLT, и был разочарован тем, насколько легко он отказался от попыток «правильно сформировать» HTML.Затем я нашел TagSoup и был очень доволен.
TagSoup также включает в себя процессор командной строки, который читает файлы HTML и может генерировать либо чистый HTML, либо правильно сформированный XML, близкий к XHTML.
Я не знаю, привязаны ли вы к HTMLTidy, но если нет, попробуйте следующее: http://home.ccil.org/~cowan/tagsoup/
Например, вот плохой файл HTML:
<body>
<p>Testing
</body>
А вот команда tagsoup и ее вывод:
~ zyoung$ java -jar /usr/local/tagsoup-1.2.jar --html bad.html
src: bad.html
<html><body>
<p>Testing
</p></body></html>
Edit 01
Вот как tagoup обрабатывает DOCTYPEs.
Вот плохой HTML-файл с действительным DOCTYPE:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<body>
<p>Testing
</body>
</html>
Вот как с ним работает tagoup:
~ zyoung$ java -jar /usr/local/tagsoup-1.2.jar --html bad.html
src: bad.html
<html><body>
<p>Testing
</p></body></html>
Пока вы явно не передадите DOCTYPE в tagoup, он попытаетсядля вывода одного:
~ zyoung$ java -jar /usr/local/tagsoup-1.2.jar --html --doctype-public=html bad.html
src: bad.html
<!DOCTYPE PUBLIC "html" "">
<html><body>
<p>Testing
</p></body></html>
Надеюсь, это поможет,
Захари