Replace Tag in HTML with DOMDocument

后端 未结 2 1415
攒了一身酷
攒了一身酷 2021-01-18 17:51

I\'m trying to edit html tags with DOMDocument::loadHTML in php. The html data is a part of html and not the whole page. I followed what this page (PHP - DOMDocument - need

2条回答
  •  悲哀的现实
    2021-01-18 18:27

    The problem is the call to replaceChild(). Rather than

    $dom->replaceChild($nodeDiv, $nodePre);
    

    use

    $nodePre->parentNode->replaceChild($nodeDiv, $nodePre);
    

    update

    Here is a working code. Seems there is some issue with replacing multiple nodes (more info here: http://php.net/manual/en/domnode.replacechild.php) so you'll have to use a regressive loop to replace the elements.

    $contents = <<hi
    hello
    bye
    STR; $dom = new DOMDocument; @$dom->loadHTML($contents); $elements = $dom->getElementsByTagName("pre"); for ($i = $elements->length - 1; $i >= 0; $i --) { $nodePre = $elements->item($i); $nodeDiv = $dom->createElement("div", $nodePre->nodeValue); $nodePre->parentNode->replaceChild($nodeDiv, $nodePre); }

提交回复
热议问题