Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 "&lt;strong&gt;"

The "strong" 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?

like image 281
user534312 Avatar asked Apr 24 '26 12:04

user534312


2 Answers

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>');
like image 50
valentinarho Avatar answered Apr 26 '26 02:04

valentinarho


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.

like image 37
fredrover Avatar answered Apr 26 '26 01:04

fredrover



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!