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 "<strong>"
本示例中的“强”标签将转换为文本。 实际上我需要在那里添加一个大的 HTML 代码。而且它的格式不是很好,稍后会修复。
我该怎么做?
【问题讨论】:
【参考方案1】:为了添加 XML 的新部分,您需要以某种方式从它们中创建 DOM 节点,而不是使用纯文本。
您可以尝试使用 DOMDocument 片段:http://www.php.net/manual/en/domdocumentfragment.appendxml.php
或者,正如它在该页面上所建议的那样,创建一个额外的 DOMDocument 对象并循环遍历节点以将它们添加到您的原始 DOMDocument 中。
【讨论】:
【参考方案2】:只需使用createCDATASection函数:$found->appendChild($dom->createCDATASection ( ' <strong>FIRST</strong> '.$found->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?