从DOM Document类获取根节点

时间:2011-11-28 14:31:31

标签: php domdocument

我正在尝试获取PHP DOM文档的根节点。这通常通过以下方式完成:

$doc->documentElement;

但是,在包含doctype的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 个答案:

答案 0 :(得分:2)

Doctype不是根节点,html是。 doctype只是doctype声明,它告诉浏览器文件的其余部分是什么。

也许你可以使用DOMDocument :: doctype? ($doc -> doctype

答案 1 :(得分:0)

DOCTYPE实际上不是一个节点,它当然不是根节点。试试$doc->doctype

答案 2 :(得分:0)

前段时间我遇到了这个问题,因为我实际上根本不想要DOCTYPE。我使用的是代码段,并且很难让返回的值无法使用DOCTYPE,并且在不应该添加的时候会添加HTML标记。

我将在这里提出一个答案,以防你遇到同样的问题。如果您有更新版本的php,我的解决方案实际上会阻止添加任何DOCTYPE元素。我认为它至少是PHP v5.4及以上版本,也是最低版本的LibXML v2.7.8。如果这两个版本都是最新版本,那么就像在DOMDocument对象的loadHTML实现的方法调用中添加常量标志一样简单。常量是LIBXML_HTML_NODEFDTD,它就像这样使用....

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

通过这种方式,根本不需要额外的解析,你可以在没有DOCTYPE问题的情况下继续生活......除非你需要DOCTYPE标签,在这种情况下我的回答是让别人通过谷歌找到它:)