2010-02-21 3 views
19

У меня встроенный HTML Tidy в моем приложении для очистки входящего HTML. Но у Tidy огромное количество ошибок, и исправление их непосредственно в источнике - мой худший кошмар. Типичный исходный код - нечитаемая мерзость. Thousand + линейные функции, плохое именование имен, код спагетти и т. Д. Это действительно ужасно.Есть ли альтернатива HTML Tidy?

Хуже еще, официальное развитие seems to have ceased. За последние 12 месяцев было три записи транзакций на официальное репозиторию CVS. Но он был мертв и похоронен гораздо дольше, чем это ...

Итак, я ищу приложение или библиотеку OSS C или C++, которая может делать то, что может сделать Tidy (когда это похоже): исправить плохую разметку HTML и превратить его в действительный XHTML (это часть, которая мне интересна). И я имею в виду всевозможные плохие разметки.

Есть ли что-то в этом роде?

EDIT: Мне нужно это для манипуляций на дереве DOM с помощью инструмента обработки XML и для общего соответствия спецификации XHTML. Мое приложение должно принимать HTML-код от пользователей (что часто бывает недействительным всеми способами) и выводить действительный XHTML. Он должен иметь возможность обрабатывать даже HTML, который обычно не отображается в браузере, потому что пользователь отредактировал его вручную и не проверял впоследствии.

Замена замены для парсинга, исправляющего ошибки Tidy ..., который не сосать. Я не возражаю против ошибок, если источник доступен для чтения, и я могу самостоятельно решать проблемы, или если есть активные разработчики, которые своевременно предоставляют исправления.

+0

Не знаю, подходит ли это для вас, но есть Java-библиотека под названием TagSoup (http: //home.ccil.org/~ cowan/XML/tagsoup /), который, по-видимому, имеет пару портов C++, возможно, за исключением того, что он не является бесплатным, и я не уверен, что другие поддерживаются. Он создает поток событий SAX, но превращение этого в XML-вывод просто должно быть связано с присоединением правой трубы к соплу. Тем не менее, я никогда не использовал его сам. –

ответ

2

Не могли бы вы рассказать нам, для чего вы собираетесь использовать этот инструмент? Как и в, вы хотите исправить статические веб-страницы или хотите какой-то шаг фильтрации перед другими манипуляциями, чтобы какой-нибудь инструмент мог обрабатывать веб-страницы с ошибками?

Лично я пишу свой собственный инструмент поверх Python's BeautifulSoup или lxml всякий раз, когда мне нужно - это не более дюжины строк и делает многое из того, что я хочу.

+0

Я не могу использовать Python или его библиотеки. Это GUI, приложение с собственным кодом. Интеграция интерпретатора Python не является вариантом. – Lucas

+0

Ну, для графического интерфейса GUI, технически интегрируя интерпретатор Python *, есть опция, но, возможно, не привлекательная, когда вы оцениваете плюсы и минусы. http://docs.python.org/extending/embedding.html –

+0

Затем я бы посмотрел на собственные привязки для lxml --- он может хорошо разбираться, даже для ужасно разбитого html. – pavpanchekha

1

Попробуйте Pretty Diff. Это значительно превосходящий алгоритм благоустройства, и он не делает никаких предположений о вашем вводе.

http://prettydiff.com/?m=beautify&html

+3

Опишите вашу компанию. –

2

Существует новый, хороший, правильный HTML 5 поддерживает Tidy, поэтому альтернатива старым, уродливым Tidy будет Tidy (GitHub repository).

0

Для чего-то, что на самом деле исправления код, ваш лучший выбор по-прежнему HTML Tidy. Есть много линтеров, но не совсем ничего, что исправляет ошибки в HTML, кроме Tidy.

На первый взгляд, современные ООП программисты могли бы думать, что исходный код является нечитаемым мерзостью, но и в мире C, Tidy довольно сложная библиотека, которая использует много передовых концепций ОО и предлагает очень продуманный интерфейс, предоставляет практически все свои функциональные возможности в чистом C API.

Случайный разработчик будет потерян, но после погружения код довольно красивый. Разумеется, соглашения об именах - смешанные плохие, но пиар приветствуются!

Смежные вопросы