Имеется текст с XML-форматированием:
<div id="recordContent">
<div style="font-style:normal;">
<p>Text 1</p>
<p>Text 2</p>
</div>
</div>
Необходимо в нем заменить тег <div id=«recordContent»> на <body>, вот так:
<body>
<div style="font-style:normal;">
<p>Text 1</p>
<p>Text 2</p>
</div>
</body>
Для этого я написал следующий минимальный код:
<?php
$contents = <<<STR
<div id="recordContent">
<div style="font-style:normal;">
<p>Text 1</p>
<p>Text 2</p>
</div>
</div>
STR;
$htmlDom = new DOMDocument();
$htmlDom->loadHTML($contents);
// Поиск элемента с внутренними узлами
$element = $htmlDom->getElementById("recordContent");
if ($element)
{
// Создание нового элемента <body>
$htmlBody = $htmlDom->createElement('body');
// Копирование дочерних элементов из <div> в <body>
foreach ($element->childNodes as $child)
{
$htmlBody->appendChild($child);
}
// Замена элемента <div> верхнего уровня
$element->parentNode->replaceChild($htmlBody, $element);
// Получаем HTML-код внутри элемента
$innerHtml = $htmlDom->saveXML();
echo $innerHtml;
}
?>
И этот PHP-код генерит вот такой текст:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><body>
</body></body></html>
Вопрос: что не так, почему вместо замены одного головного элемента происходит не то что ожидается?