2012-03-29 79 views
11

我解析并提取HTML文档到DOMDocument。这些文档是将显示在另一个页面内的子表单。在保存解析的DOMDocuments时,它会自动添加doctype,html,head和body标签。因为我正在处理子表单,所以我想删除所有这些表单并仅保存子标记。保存domdocument时删除文档类型

如何跳过在保存domdocument时自动生成html,head,body和其他标签?

回答

15

通过阅读数百个链接后自己明白。希望它可以帮助其他人也...

return preg_replace('/^<!DOCTYPE.+?>/', '', str_replace(array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $objDOM->saveHTML())); 

细节上:http://www.php.net/manual/en/domdocument.savehtml.php

20

同@KoolKabin答案,但更短一点:

return preg_replace('~<(?:!DOCTYPE|/?(?:html|body))[^>]*>\s*~i', '', $dom->saveHTML()); 
4

由于PHP 5.4和xml库[Libxml 2.6,目前有更简单的方法:当你加载html为这样的

$html->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); 

在输出中,会有没有文档类型,html或body标签。 source