PHP DomDocument удаление элемента скремблирует HTML - PullRequest
2 голосов
/ 25 сентября 2011

У меня проблемы с удалением узла с помощью 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); 

Затем я пытаюсь просмотреть HTML с помощью echo:

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

Затем HTML становится следующим:

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

Что только что произошло?HTML был искажен?Правильно ли я удаляю узел?

Странно, когда я вычисляю xPath для узла jquery, он отображается так, как будто он присоединен к узлу тела, а не к главному узлу?

/html[1]/body[1]/script[1]

Ответы [ 2 ]

1 голос
/ 25 сентября 2011

Если вы посмотрите на ошибки, вы увидите, что они говорят:

Предупреждение: DOMDocument :: loadHTML (): DOCTYPE неправильно завершен в Entity, строка: 1

Измените DOCTYPE на

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

, и он будет работать как положено: demo

1 голос
/ 25 сентября 2011

попробуйте это:

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