3
  $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?

0

4 Answers 4

2

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>');
Sign up to request clarification or add additional context in comments.

1 Comment

Please flag as a duplicate rather than posting an answer that's just an link to another question on Stack Overflow.
1

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.

Comments

1

Simply use createCDATASection function:$found->appendChild($dom->createCDATASection ( ' <strong>FIRST</strong> '.$found->nodeValue ));

Comments

0
$first = new DOMElement('strong', 'first');
$path  = new DOMXPath($dom);

foreach($path->query('body') as $found)
{
  $found->insertBefore($first);
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.