DOMDocument和php html问题

DOMDocument和php html问题,php,dom,Php,Dom,好的。所以我使用DOMDocument来读取html文件。我注意到的一件事是当我这样做的时候 $doc = new DOMDocument(); $doc->loadHTML($htmlstring); $doc->saveHTML(); 它将添加doctype头、html和body标记 我这样做是为了逃避现实 $doc = new DOMDocument(); $doc->loadXML($htmlstring,LIBXML_NOXMLDECL); $doc->sav

好的。所以我使用DOMDocument来读取html文件。我注意到的一件事是当我这样做的时候

$doc = new DOMDocument();
$doc->loadHTML($htmlstring);
$doc->saveHTML();
它将添加doctype头、html和body标记

我这样做是为了逃避现实

$doc = new DOMDocument();
$doc->loadXML($htmlstring,LIBXML_NOXMLDECL);
$doc->saveXML();
然而,问题是现在我所有的标签都是区分大小写的,如果我有多个文档根,它会变得很疯狂

有没有其他方法可以让我加载部分html文件、抓取标记之类的内容、替换它们并获取字符串,而无需手动解析文件

基本上我想要
DOMDocument->loadHTML
的功能性,而不需要添加标签和标题


有什么想法吗?

您可以使用一些具有特定id的div,然后从文档对象中,使用其id部分提取div对象。

理论上,您可以告诉libxml不要添加隐含的标记。实际上,PHP的libxml绑定没有提供任何方法来实现这一点。如果您使用的是PHP5.3.6+,请将部分文档的根节点传递到
saveHTML()
,然后它将为您提供该元素的outerHTML,例如

$dom->saveHTML($dom->getElementsByTagName('body')->item(0));
只返回带有子元素的
元素。看

还请注意,具有多个根元素的部分文档只起作用,因为
loadHTML
添加了隐含的元素。如果要返回具有多个根(或者完全没有根)的分部,可以自己添加一个假根:

$dom->loadHTML('<div id="partialroot">' . $partialDoc . '</div>');
$dom->loadHTML('.$partialDoc');
然后根据需要处理文档,然后获取假根目录的innerHTML

另请参阅,以获取可能需要尝试的其他解析器