2011-09-26 53 views
2

好的。所以我使用DOMDocument来读取HTML文件。我注意到的一件事是,当我这样做时DOMDocument和php 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的功能,没有添加标签和标题。

任何想法?

回答

0

你可以使用一些div与特定ID,然后从文档对象,使用ID部分提取的div对象。

2

理论上你可以告诉libxml不要添加隐含的标记。实际上,PHP的libxml绑定不提供任何方法。如果您使用的是PHP 5.3.6+,则将您的部分文档的根节点传递给saveHTML(),然后它将为您提供该元素的outerHTML,例如,

$dom->saveHTML($dom->getElementsByTagName('body')->item(0)); 

只会返回子节点<body>元素。见

另外请注意,您有多个根元素部分文件只适用因为loadHTML增加了隐含的元素。如果你想用多根(或者说没有根的话)后面的部分,你可以自己添加一个虚拟根:根据需要

$dom->loadHTML('<div id="partialroot">' . $partialDoc . '</div>'); 

然后处理文档,然后获取该虚拟根的innerHTML

另见How do you parse and process HTML/XML in PHP?额外的解析器,你可能想尝试