我正在尝试获取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文档对象中,如下所示:
$doc = new DOMDocument();
$doc->loadHTML($html);
返回根节点作为html
标记,而不是doctype标记!我猜这是因为奇怪的字符<!
- -有没有能正确返回根节点的方法?
发布于 2011-11-28 14:32:59
Doctype不是根节点,html
是。doctype仅仅是doctype声明,它告诉浏览器文件的其余部分是什么。
也许你可以使用DOMDocument::doctype?($doc -> doctype
)
发布于 2011-11-28 14:34:06
DOCTYPE
实际上不是一个节点,它当然也不是根节点。试试$doc->doctype
。
发布于 2014-10-22 17:39:33
前段时间我遇到了这个问题,因为我实际上根本不想把DOCTYPE
放在里面。我使用的是代码片段,很难让返回值不受不应该添加的DOCTYPE
和HTML标记的影响。
我将给出一个不在这里的答案,以防你遇到和我一样的问题。如果你有更新版本的php,我的解决方案实际上会阻止添加任何DOCTYPE
元素。我相信它是PHPV5.4和更高版本的最低版本,也是LibXML v2.7.8的最低版本。如果这两个版本都是最新的,那么只需在DOMDocument对象的loadHTML实现的方法调用中添加一个常量标志即可。常量是LIBXML_HTML_NODEFDTD
,它的用法如下……
$doc = new DOMDocument();
$doc->loadHTML($someContentString, LIBXML_HTML_NODEFDTD);
这种方式根本不需要额外的解析,并且您可以继续您的生活,而不会出现这个DOCTYPE
问题……除非你需要DOCTYPE
标签,在这种情况下,我的答案是,让其他人通过谷歌找到它:)
https://stackoverflow.com/questions/8297359
复制相似问题