PHP-DOMDocument-необходимо изменить / заменить существующий HTML-тег с новым
Я пытаюсь изменить все <P>
теги в документе <DIV>
. Это то, что я придумал, но это, похоже, не работает:
$dom = new DOMDocument;
$dom->loadHTML($htmlfile_data);
foreach( $dom->getElementsByTagName("p") as $pnode ) {
$divnode->createElement("div");
$divnode->nodeValue = $pnode->nodeValue;
$pnode->appendChild($divnode);
$pnode->parentNode->removeChild($pnode);
}
это результат, который я хочу:
перед:
<p>Some text here</p>
после:
<div>Some text here</div>
2 ответов
вы добавляете div
на p
что приводит к <p><div></div></p>
удаление p
удалить все.
Кроме того,$divnode->createElement()
не будет работать, когда $divnode
не инициализировано.
попробуйте вместо этого использовать DOMDocument::replaceChild() (the div
позиция s в dom будет такой же, как p
s).
foreach( $dom->getElementsByTagName("p") as $pnode ) {
$divnode = $dom->createElement("div", $pnode->nodeValue);
$dom->replaceChild($divnode, $pnode);
}
расширенные функции ответ
function changeTagName( $node, $name ) {
$childnodes = array();
foreach ( $node->childNodes as $child ) {
$childnodes[] = $child;
}
$newnode = $node->ownerDocument->createElement( $name );
foreach ( $childnodes as $child ){
$child2 = $node->ownerDocument->importNode( $child, true );
$newnode->appendChild($child2);
}
if ( $node->hasAttributes() ) {
foreach ( $node->attributes as $attr ) {
$attrName = $attr->nodeName;
$attrValue = $attr->nodeValue;
$newnode->setAttribute($attrName, $attrValue);
}
}
$node->parentNode->replaceChild( $newnode, $node );
return $newnode;
}