Php - Dom,在 nodeValue 中插入 HTML_CODE

Posted

技术标签:

【中文标题】Php - Dom,在 nodeValue 中插入 HTML_CODE【英文标题】:Php - Dom, Insert HTML_CODE inside nodeValue 【发布时间】:2011-11-12 07:18:48 【问题描述】:
  $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 代码。而且它的格式不是很好,稍后会修复。

我该怎么做?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

只需使用createCDATASection函数:$found-&gt;appendChild($dom-&gt;createCDATASection ( ' &lt;strong&gt;FIRST&lt;/strong&gt; '.$found-&gt;nodeValue ));

【讨论】:

【参考方案3】:

来自这个类似的问题:How to insert HTML to 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) 使用 helper 将原始 html 插入到元素中:

$elem = $domDocument->createElement('div');
appendHTML($elem, '<h1>Hello world</h1>');

【讨论】:

请标记为重复,而不是发布只是指向 Stack Overflow 上另一个问题的链接的答案。【参考方案4】:
$first = new DOMElement('strong', 'first');
$path  = new DOMXPath($dom);

foreach($path->query('body') as $found)

  $found->insertBefore($first);

【讨论】:

以上是关于Php - Dom,在 nodeValue 中插入 HTML_CODE的主要内容,如果未能解决你的问题,请参考以下文章

PHP DOM获取nodevalue html? (不剥离标签)

PHP DOM textContent vs nodeValue?

PHP DOM:获取没有后代节点的 Nodevalue

PHP nodevalue剥离html标签

PHP Simple HTML Dom:获取childNodes nodeValue?

PHP DOM:设置 nodeValue 时,代码未格式化,而是显示文字 HTML 标签