Работа с HTML при помощи функций DOM

demon_mhm

Новичок
Работа с HTML при помощи функций DOMXML в PHP4

Здравствуйте, может кто-то решал подобную проблему?
Необходимо получить из HTML кода узлы с известными id. НО. Функция get_element_by_id не находит ничего. Как я выяснил, это связано с необходимостью поключения DTD к HTML документу. Однако, видимо DOCTYPE PUBLIC сей функции неизвестен или еще какая-то проблема, приводящая к тому, что она начинает разнообразно ругаться после добавления в начало HTML-документа строки:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
Вернее, ругается не она, а domxml_open_file(), примерно вот так:
PHP:
domxml_open_file(): SystemLiteral &quot; or ' expected
А если определение DTD не добавлять, то просто молча ничего не находит...
В сторону xpath копать не хочется, так как скорость критична. Неужели перебирать все элементы и смотреть у них id?
 

ivankrkrkr

Новичок
А думаешь DOMXML будет нормально работать с HTML? Он вообще не для этого сделан, если XHTML - то это да.
А domxml_open_file() ругается на кавычки вида ". Должны быть кавычки вида '. Посмотри в спецификацию XML, а именно, вот сюда:
http://www.w3.org/TR/2004/REC-xml-20040204/#NT-PubidLiteral
 

demon_mhm

Новичок
А чем тогда посоветуешь обрабатывать HTML? Добавлять/удалять теги, изменять аттрибуты? Да и вообще, если брать НОРМАЛЬНЫЙ HTML, то это ведь тот же XML, ничем не отличается (если не углубляться в проверку по DTD, а брать просто структуру и работать с ней как с деревом). Вот мне и подумалось что можно загнать в DOMDocument объект и подправить там чего нужно...
 

ivankrkrkr

Новичок
В самом HTML, как я понимаю, есть некотрые послабления по сравнению с XML. Например тег <HR> может не иметь закрывающего тега и это не будет ошибкой для бравузера, а вот для XML-процессора - будет. Я правда тут могу и ошибаться, но DOM XML - он для XML-документов.
Мой совет: если у тебя есть возможность задавать входной формат для добавления/изменения ДАННЫХ, то получай эти данные в виде XML-документа, а не HTML, изменяй его, а потом выводи людям как HTML.
Я бы не рискнул редактировать данные в HTML, если только не вручную!
И плюнь ты на domxml, используй dom.
 

phprus

Moderator
Команда форума
В dom есть функции которые позволяют работать с html (http://www.php.net/manual/en/function.dom-domdocument-loadhtml.php и http://www.php.net/manual/en/function.dom-domdocument-loadhtmlfile.php)
 

ivankrkrkr

Новичок
Есть то они есть, но я слабо представляю что ты будешь делать с HTML-документом после того как загрузишь его. Может быть просто потому, что не никогда не пробовал.
Если demon_mhm откажется от domxml в пользу dom, то сможет попробовать и нам потом рассказать..
 

alekciy

Новичок
От domxml придется со временем отказаться полюбому. На данный момент рудимент это уже...
Имхо, ivankrkrkr дело говорит. А клиентам отдавать страницу можно и после XSLT обработки.
 

chameleon

Новичок
В сторону xpath копать не хочется, так как скорость критична.
проверял насколько падает скорость? или ты точно знаешь, что внутри get_element_by_id('someID') и xpath_eval('//node()[@id = 'someID']') не один и тотже кусок кода работает?
 

alekciy

Новичок
ivankrkrkr
А чем там представлять то? Получаем объект класса DomDocument и начинаем его юзать, как положено. Хотя автору эти функции не помогут, DOM доступен (как ни жаль) с версии 5.
Хотя если разбор HTML фалов так критичен, то придется на PHP V5 все же перейти.
 

demon_mhm

Новичок
Ребята, спасибо за информацию, в общем-то проблему, с которой я обращался, я уже решил, но продолжая дискусию в пользу обработки HTML при помощи DOMXML хочу сказать, что послабления, о которых говорил ivankrkrkr, касаются скорее браузеров и действительно имеют место быть. Однако нам никто не мешает сформировать well formed HTML документ и работать с ним как с XML-документом.
А в сторону PHP5 смотрю давно, просто условия разработки пока не позволяют перейти на эту версию, т.к. не все провы еще ее поддерживают.
По поводу разницы в скорости dom-xslt vs dom-xml, не проверял, но част овстречал подобные отзывы в сети и решил принять это как данность, т.к. нет времени эксперементировать :)
 

alekciy

Новичок
ivankrkrkr
Нет. Это ответ на:
...но я слабо представляю что ты будешь делать с HTML-документом после того как загрузишь его.
 
Сверху