我正在尝试将文档中的所有<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>
答案 0 :(得分:9)
您要将div
追加到p
<p><div></div></p>
,结果为p
,移除$divnode->createElement()
会删除所有内容。
如果$divnode
未初始化,则div
将无效。
请改为使用DOMDocument::replaceChild()(dom中p
的位置与foreach( $dom->getElementsByTagName("p") as $pnode ) {
$divnode = $dom->createElement("div", $pnode->nodeValue);
$dom->replaceChild($divnode, $pnode);
}
s相同。
{{1}}
答案 1 :(得分:0)
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;
}