在nodeValue中插入HTML_CODE


  $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;"

本例中的"strong"标签将在文本中进行转换。实际上,我需要在这里添加一个大的HTML代码。而且格式不太好,稍后会修复的。

我该怎么做?

从这个类似的问题:如何插入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>');

为了添加XML的新部分,您需要以某种方式创建DOM节点,而不是直接使用文本。

您可以尝试使用DOMDocument Fragment: http://www.php.net/manual/en/domdocumentfragment.appendxml.php

或者,正如该页所建议的,创建一个额外的DOMDocument对象并循环遍历节点以将它们添加到原始DOMDocument。

使用createCDATASection函数:$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);
}

相关内容

  • 没有找到相关文章

最新更新