Я думаю, что Jericho HTML Parser может выполнить по крайней мере одно из ваших основных требований («Если входной документ недействителен, HTML-анализ не может быть выполнен») в том смысле, что он по крайней мере скажет вы, если есть несоответствующие теги или другие ядовитые недостатки HTML, и вы можете отказаться на основании этой информации.
Попробуйте ввести недопустимый html в эту демонстрацию форматирования в Иерихоне и обратите внимание на «Log Parser Log» внизу страницы:
http://jerichohtmlparser.appspot.com/samples/FormatSource.jsp
Так что да, этот выполняет приведение в порядок тегов, но, по крайней мере, говорит вам об этом - вы можете получить эту информацию, установив net.htmlparser.jericho.Logger ( например, WriterLogger или что-то более конкретное из вашего собственного творения) в вашем источнике, а затем продолжайте в зависимости от того, какие ошибки вышли из системы. Это небольшой пример:
Source source=new Source("<a>I forgot to close my link!");
source.setLogger(myListeningLogger);
source.getSourceFormatter().writeTo(new NullWriter());
// myListeningLogger has now had all the HTML flaws written to it
В приведенном выше примере метод info () вашего регистратора вызывается со строкой: 'StartTag at (r1,c1,p0) missing required end tag
', которая относительно разбирается, и вы всегда можете решить просто отклонить любой HTML-код, который регистрирует любое сообщение хуже, чем отладка Фактически, Иерихон регистрирует почти все ошибки как уровень «информация» с парой на уровне «предупреждение» (у вас может возникнуть соблазн создать небольшой форк с серьезностями, отрегулированными в соответствии с тем, что вас волнует).
Иерихон доступен на Maven Central, что всегда является хорошим знаком:
http://mvnrepository.com/artifact/net.htmlparser.jericho/jericho-html
Удачи!