Преобразование HTML в XML

Cid

...двинутый новичок
Преобразование HTML в XML

Обсуждение. Личный опыт.

Задача - с помощью XML-функций в PHP преобразовать имеющийся (произвольный) HTML-файл в формат XML. Поскольку HTML-документ можно рассматривать как частный случай XML, то можно натравить на него xml_parse()....

В общем, без регэкспов - никуда. Все равно сначала придется
- пройти по всему документу и заключить в кавычки все незаключенные в них атрибуты всех тэгов
- привести названия всех тэгов к одному регистру
- все незакрывающиеся по определению тэги привести к виду <TAG />

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

Кто еще с этим сталкивался, может, уже есть готовые преобразователи?
 

Макс

Старожил PHPClub
это ошибки верстки, связанные с отсутствием закрывающих тэгов... как это обойти - большой вопрос!
нанять нормального ХТМЛ-кодера вам конечно не по карману ?
 

Yaguan

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

Еще нужно учитывать, что html допускает конструкции вида <b><i></b></i>.
 

Cid

...двинутый новичок
Стандарт таких перекрестных конструкций не предусматривает, это просто отдельные браузеры в состоянии корректно интерпретировать такой код.

Спасибо за ссылку
 

Макс

Старожил PHPClub
Вот такой пример :
Код:
<p> <b> Это заголовок <br>
<i> это выделенный текст </i>
и так далее .... <br>
</p>
Как программа должна догадаться, где в данном месте закрыть тег </b> ?
Можно отследить, что тег не закрыт, но где его закрыть должен решать верстальщик

ЗЫ
antonio писал, что его HTML_Parser может работать с невалидным ХТМЛ, но как его использовать для данной задачи я не вижу (http://phpclub.ru/talk/showthread.php?s=&threadid=47619&rand=26)
 

Cid

...двинутый новичок
Как программа должна догадаться, где в данном месте закрыть тег </b> ?
"Догадаться" она может также, как Tidy или IE - если тэг не закрыт, то он принудительно закрывается перед появлением следующего.

Так что, видимо, в качестве строгого требования к "входящему" HTML нужно устанавливать непременное требование к целостности тэгов...
 

Crazy

Developer
Автор оригинала: Yaguan
Еще нужно учитывать, что html допускает конструкции вида <b><i></b></i>.
HTML не допускает конструкций такого вида. Конструкции такого вида соглашаются некоторым образом интерпретировать браузеры.
 

render

Guest
Я бы советовал использовать библиотеку DOMXML, эта либа строит дерево тегов документа и ты можешь обходить элементы дерева с помощью вызовов методов. Стандарт HTML не поддерживает не правильное закрытие тегов (если это поддерживает microsoft это еще не стандарт!).
 
Сверху