2011-09-26 95 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?額外的解析器,你可能想嘗試