Php - Dom, Insert HTML_CODE inside nodeValue
$dom= new DOMDocument('1.0', 'iso-8859-1');
$dom->loadHTML(' <html><body> <strong>SECOND</strong> </body></html>');
$path = new DOMXPath($dom);
foreach($path->query('body') as $found){
$found->nodeValue = ' <strong>FIRST</strong> '.$found->nodeValue;
}
var_dump($dom->saveHTML()); //It shows <strong> as "<strong>"
The "strong"开发者_StackOverflow中文版 tags in this example will be transformed in text. Actually I need to add a big HTML code there. And its not well formated, somethings will be fixed later.
How can I do this?
From this similar question: How to insert HTML to PHP DOMNode?
1) Create an helper function:
private static function __appendHTML($parent, $rawHtml) {
$tmpDoc = new DOMDocument();
$tmpDoc->loadHTML($rawHtml);
foreach ($tmpDoc->getElementsByTagName('body')->item(0)->childNodes as $node) {
$importedNode = $parent->ownerDocument->importNode($node, TRUE);
$parent->appendChild($importedNode);
}
}
2) Use the helper to insert raw html into an element:
$elem = $domDocument->createElement('div');
appendHTML($elem, '<h1>Hello world</h1>');
In order to add new parts of the XML, you'll need to create DOM nodes out of them somehow instead of using straight text.
You might try using DOMDocument Fragment: http://www.php.net/manual/en/domdocumentfragment.appendxml.php
Or, as it suggests on that page, create an additional DOMDocument object and loop through the nodes to add them to your original DOMDocument.
Simply use createCDATASection function:$found->appendChild($dom->createCDATASection ( ' <strong>FIRST</strong> '.$found->nodeValue ));
$first = new DOMElement('strong', 'first');
$path = new DOMXPath($dom);
foreach($path->query('body') as $found)
{
$found->insertBefore($first);
}
精彩评论