我在使用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"></p>
<body>
</body>
</html>
刚刚发生了什么? HTML被破坏了吗?我没有正确删除节点吗?
奇怪的是,当我为jquery节点计算xPath时,它显示为连接到body节点而不是头节点?
/html[1]/body[1]/script[1]
答案 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