我正在尝试使用<foo>
元素替换DOMDocument中的所有<bar>
元素。最好的方法是使用getElementsByTagName获取所有<foo>
元素,然后创建新元素以替换它们。
问题是,我无法从被替换的元素中获取innerHTML。 nodeValue和textContent都返回内部文本,但内部标记被剥离。如何从DOMElement中获得类似于“innerHTML”的内容?
示例代码:
function convertTags($doc, $type) {
$bad_nodes = $doc->getElementsByTagName($type);
foreach($bad_nodes as $bad_node) {
$good_node = $doc->createElement("bar", $bad_node->nodeValue);
$bad_node->parentNode->replaceChild($good_node, $bad_node);
}
return $doc;
}
答案 0 :(得分:3)
我认为你可以通过将它们视为实际节点来做得更好:
$good_node = $doc->createElement('bar');
foreach( $bad_node->childNodes as $kid )
{
$good_node->appendChild( $kid );
}
答案 1 :(得分:0)
使用DOMDocument::saveHTML()
方法,并指定要转储的节点。如果我了解您的示例中的哪些节点正在寻找从中提取HTML,请尝试类似:
foreach($bad_nodes as $bad_node) {
$good_node = $doc->createElement("bar", $bad_node->nodeValue);
$bad_node->parentNode->replaceChild($good_node, $bad_node);
// Call saveHTML on the node you want to dump.
$doc->saveHTML($bad_node);
}
答案 2 :(得分:0)
如果将坏元素的所有子节点移动到好元素中会发生什么?如果不使用innerHTML类型方法,是否可以这样做?
我相信saveHTML()应该返回你应用它的节点的标记,如果这对你有任何帮助的话。