PHP DomDocument删除元素扰乱HTML

时间:2011-09-25 11:59:34

标签: php domdocument

我在使用PHP DomDocument删除节点时遇到问题。

我有一些像这样的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); 

然后我尝试通过echo查看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]

2 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分:1)

如果您查看错误,您会看到它说:

  

警告:DOMDocument :: loadHTML():DOCTYPE在实体中不正确终止,第1行

将DOCTYPE更改为

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

它将按预期工作:demo