2011-09-25 142 views
2

我遇到問題,使用PHP DomDocument刪除節點。PHP DomDocument刪除元素加擾HTML

我有一些HTML像這樣:

<!DOCTYPE HTML "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
<title>Test</title> 
<script id="fr21" type="text/javascript" src="jquery.min.js"></script> 
</head> 
<body> 
</body> 
</html> 

我試圖刪除腳本節點像這樣:

$jquery_node = $doc->getElementById('fr21'); 

$head_node = $jquery_node->parentNode; 

$head_node->removeChild($jquery_node); 

然後我嘗試回聲查看HTML:

echo $doc->saveHTML().'<br><br>'; 

HTML然後變成這樣:

<!DOCTYPE HTML> 
<html> 
<body><p>-//W3C//DTD HTML 4.0 Transitional//EN"&gt;</p> 
<body> 
</body> 
</html> 

剛剛發生了什麼? HTML已被破壞?我沒有正確刪除節點嗎?

奇怪的是,當我計算jQuery節點的xPath時,它顯示爲它連接到body節點而不是頭節點?

/html[1]/body[1]/script[1] 
+0

*去除可能重複的,因爲它不適用。不要簡單說明* – Gordon

+0

這不是一個saveHTML的問題 - 它更多的是與去除導致問題 - 我想。 – Abs

回答

1

如果你看一下錯誤,你會看到,它說:

警告:DOM文檔:: loadHTML():DOCTYPE的不當終止實體,行數:1

將DOCTYPE更改爲

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

,並預期它會工作:demo

+0

是的,你是對的。我的文檔類型被徹底搞砸了 - 我甚至沒有注意到。謝謝! – Abs

1

試試這個:

$script_0 = $doc->getElementsByTagName('script')->item(0); 
$doc->removeChild($script_0);