Удалить родительский элемент, сохранить все внутренние дочерние элементы в DOMDocument с помощью saveHTML

Я работаю с коротким 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?

9
задан pp19dd 2 May 2012 в 15:20
поделиться