Php - Dom, вставьте HTML_CODE в nodeValue - PullRequest
2 голосов
/ 07 сентября 2011
  $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;"

«Сильные» теги в этом примере будут преобразованы в текст.На самом деле мне нужно добавить большой HTML-код там.И это плохо отформатировано, кое-что будет исправлено позже.

Как я могу это сделать?

Ответы [ 4 ]

1 голос
/ 21 сентября 2015

Из этого похожего вопроса: Как вставить HTML в PHP DOMNode?

1) Создать вспомогательную функцию:

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) Используйте помощник для вставки необработанного HTML в элемент:

$elem = $domDocument->createElement('div');
appendHTML($elem, '<h1>Hello world</h1>');
1 голос
/ 23 ноября 2014

Просто используйте функцию createCDATASection: $found->appendChild($dom->createCDATASection ( ' <strong>FIRST</strong> '.$found->nodeValue ));

1 голос
/ 07 сентября 2011

Чтобы добавить новые части XML, вам нужно каким-то образом создать из них DOM-узлы вместо использования простого текста.

Вы можете попробовать использовать фрагмент DOMDocument: http://www.php.net/manual/en/domdocumentfragment.appendxml.php

Или, как предлагается на этой странице, создайте дополнительный объект DOMDocument и выполните цикл по узлам, чтобы добавить их в исходный DOMDocument.

0 голосов
/ 07 сентября 2011
$first = new DOMElement('strong', 'first');
$path  = new DOMXPath($dom);

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