2011-09-25 120 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);