我正在尝试获取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标记!我猜这是因为奇怪的字符<!
-是否有正确返回根节点的方法?
Doctype不是根节点,html
是根节点。Doctype只是一个Doctype声明,它告诉浏览器文件的其余部分是什么。
也许您可以使用DOMDocument::doctype?($doc -> doctype
(
DOCTYPE
实际上不是一个节点,它当然也不是根节点。尝试$doc->doctype
。
我前段时间遇到了这个问题,因为我实际上根本不想让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
标签,在这种情况下,我的答案并让其他人通过谷歌找到:(