Re[2]: Исправление HTML
От: korzh.pavel Россия  
Дата: 23.01.08 15:56
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, korzh.pavel, Вы писали:


KP>>Вообще задача такая:


К>Вот с этого и надо было начинать.

К>А я, дурень, забыл спросить, просто набросился на прикольный этюд.

ну так вроде моя задача в общем случае сводится как раз к задаче подгона строки под рег.выражение

KP>>Есть очень большой набор html, который собирался в результате нескольких лет эксплуатации системы.

KP>>Встречается Html совершенно "дикий". Надо всю эту базу преобразовать в абсолютно валидный html.

KP>>На него напускается htmltidy, но всё равно, даже после htmltidy, встречаются достаточно много html, который не проходит валидацию.


KP>>Одна из проблем это content specification validate and recovery.

KP>>Например для table имеем такой content specification: <!ELEMENT table (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>

К>А в чём засада — нужно пропатчить эвристики у tidy; или сделать ещё одну прогу, которая после tidy дорабатывает; или что ещё?


нужно сделать прогу которая после tidy дорабатывает

К>Кстати, а как насчёт такого варианта:

К>- взять DOM-парсер HTML, нечувствительный к дикости (ну скажем, из мозиллы)
К>- всосать в него дикий HTML
К>- как-бы-рендерить — сериализовать обратно в валидный HTML с правильной структурой и сбалансированными тэгами

К>Медленное удовольствие, конечно... зато (имхо) надёжное.

К>Правда, есть заподлянка: дикость-то исправлена будет, а вот ошибки легализуются. Например, одинокий <p>...<b>...</p> сделает жирным весь документ до конца (а после легализации появится куча <p><b>...</b></p>).

да не, я лучше после tidy подчищу.

К>С другой стороны, — судя по документации tidy, она излишне бдит.

К>
К><p>Plain <b>bold <i>bold-italic</b> italic</i> text</p>

К>который рендерится как
К>Plain bold bold-italic italic text

К>она превращает в
К><p>Plain <b>bold <i>bold-italic</i> italic</b> text</p>

К>что даёт
К>Plain bold bold-italic italic text
К>


да, с tidy не всё идельно, но в общем случае она нормально отрабатывает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.