У меня проблема с PHP-скриптом, использующим класс DOMDocument
.Мне нужно исправить HTML-документ, который поставляется с некоторыми элементами внутри тегов Span, поэтому мне нужно изменить этот диапазон для div, например:
<span class="example1">Some text <div>whatever...</div></span>
результат должен быть:
<div class="example1">Some text <div>whatever...</div></div>
Мой PHP-файл:
$html = '<html>
<head>
</head>
<body>
<span class="class_1">Example 1</span>
<span class="class_2">Example 2<span class="class_3">Example 3</span></span>
<span class="class_4">Example 4</span>
<span class="class_5">Example 5<span class="class_6">Example 6<span class="class_7">Example 7</span></span></span>
<div><span class="class_8">Example 8</span></div>
</body>
</html>';
$dom = new DOMDocument();
$dom->loadHTML($html);
$innerHTML = '';
$oldname = 'span';
$newname = 'div';
$element = $dom->getElementsByTagName($oldname);
for($i=0;$i< $element->length ;$i++){
$node = $element->item($i);
while ($node->hasChildNodes() ) {
$child = $node->childNodes->item(0);
$newTag = $child->nodeType == 1 ? $newname : $oldname;
$newNode = $node->ownerDocument->createElement($newTag);
$child = $node->ownerDocument->importNode($child, true);
$newNode->appendChild($child);
}
foreach ($node->attributes as $attr) {
$attrName = $attr->nodeName;
$attrValue = $attr->nodeValue;
$newNode->setAttribute($attrName, $attrValue);
}
$node->parentNode->replaceChild($newNode, $node);
}
$innerHTML .= $dom->saveXML();
echo $innerHTML;
Вывод:
<?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><head/><body>
<span class="class_1">Example 1</span>
<div class="class_2"><span class="class_3">Example 3</span></div>
<span class="class_4">Example 4</span>
<div class="class_5"><span class="class_6">Example 6<span class="class_7">Example 7</span></span></div>
<div><span class="class_8">Example 8</span></div>
</body></html>
Здесь у меня есть 2 проблемы:
1) Первая - это то, что диапазон сclass "class_6" должен быть Div, потому что он имеет дочерний элемент, но он не заменяет его.
2) Второй - текст отсутствует при его замене на div, например, в div class =«class_2» пропал текст «Пример 2».
Как я могу это исправить?