Я работаю с коротким HTML-фрагментом с помощью XPath; когда я вывожу измененный фрагмент обратно с помощью $doc ->saveHTML (), добавляется DOCTYPE
, а теги HTML / BODY
оборачивают вывод. Я хочу удалить их, но оставить все дочерние элементы внутри, используя только функции DOMDocument. Например,:
$doc = new DOMDocument();
$doc->loadHTML('<p><strong>Title...</strong></p>
<a href="http://www....."><img src="http://" alt=""></a>
<p>...to be one of those crowning achievements...</p>');
// manipulation goes here
echo htmlentities( $doc->saveHTML() );
Это дает:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"...>
<html><body>
<p><strong>Title...</strong></p>
<a href="http://www....."><img src="http://" alt=""></a>
<p>...to be one of those crowning achievements...</p>
</body></html>
Я пробовал некоторые простые приемы, такие как:
# removes doctype
$doc->removeChild($doc->firstChild);
# <body> replaces <html>
$doc->replaceChild($doc->firstChild->firstChild, $doc->firstChild);
До сих пор удалял только DOCTYPE и заменял HTML на BODY. Однако на данный момент остается тело > переменное количество элементов.
Как удалить тег <body>
, но сохранить все его дочерние элементы, учитывая, что они будут иметь переменную структуру, аккуратным -чистым способом с манипуляциями с DOM в PHP?