Получить корневой узел из класса DOM Document - PullRequest
0 голосов
/ 28 ноября 2011

Я пытаюсь получить корневой узел документа PHP DOM. Обычно это делается примерно так:

$doc->documentElement;

Однако, попробуйте это в строке HTML, содержащей тип документа:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">...

и это загружается в объект DOM Document примерно так:

$doc = new DOMDocument();
$doc->loadHTML($html);

возвращает корневой узел в виде тега html, а не тега doctype! Я предполагаю, что это из-за странных символов <! - есть ли в любом случае правильно вернуть корневой узел?

Ответы [ 3 ]

2 голосов
/ 28 ноября 2011

Doctype не является корневым узлом, html является.Doctype - это просто объявление doctype, которое сообщает браузеру, каков остальной файл.

Может быть, вы можете использовать DOMDocument :: doctype?($doc -> doctype)

0 голосов
/ 22 октября 2014

Я столкнулся с этой проблемой некоторое время назад, и это было потому, что я вообще не хотел, чтобы DOCTYPE был там вообще.Я использовал фрагменты кода и с трудом заставлял возвращаемые значения быть необработанными с добавлением DOCTYPE и HTML-тегов, когда их не должно быть.

Я собираюсь представить ответ, которого еще нет здесьна тот случай, если у тебя та же проблема, что и у меня.Мое решение фактически предотвращает добавление любых элементов DOCTYPE, если у вас более новая версия php.Я считаю, что это минимум PHP v5.4 и выше, а также минимум LibXML v2.7.8.Если у вас есть обе эти версии в актуальном состоянии, это так же просто, как добавить флаг константы к вызову метода реализации loadHTML объекта DOMDocument.Константа равна LIBXML_HTML_NODEFDTD, и она используется следующим образом ...

$doc = new DOMDocument();
$doc->loadHTML($someContentString, LIBXML_HTML_NODEFDTD);

Таким образом, дополнительный разбор вообще не требуется, и вы можете продолжать свою жизнь без этой проблемы DOCTYPE.Если вам не нужен тег DOCTYPE, в этом случае мой ответ и пусть кто-то другой найдет его через Google :)

0 голосов
/ 28 ноября 2011

DOCTYPE на самом деле не узел, и, конечно, это не корневой узел. Попробуйте $doc->doctype.

...