PHP DomNode nodeValue> <问题

时间:2017-01-02 22:37:41

标签: php

我正在尝试设置像这样的元素的nodeValue:

$element->nodeValue = get_include_contents(DIR_APP . Config::getParam("layout_dir").$itemTemplateFilePath);

get_include_contents函数返回一个如下所示的html:

<li>Person <b>{{ $name }}</b> is  <span>{{ $age }}</span> years old. <a href="" data-id="{{ $id }}" data-event="Event: 'onclick', Action: 'deleteThePerson'">X</a></li>

问题在于&lt;和&gt;被&lt;&gt;取代。如何解决?如何设置包含其他html的元素的内部html?

1 个答案:

答案 0 :(得分:0)

如果您想在html树中添加DOM阻止,则应使用appendChild而不是nodeValue方法。

问题是您首先需要创建DON Node

以下是如何执行此操作的技巧:

// This will be the original doc we work on.
$doc1 = new DOMDocument();
$doc1->loadHTML("<html><body><p></p></body></html>");


$element = $doc1->getElementsByTagName('p')[0];

// Here is the trick - we create a new document
$doc2 = new DOMDocument();
$s = '<li>Person <b>{{ $name }}</b> is  <span>{{ $age }}</span> years old. <a href="" data-id="{{ $id }}" data-event="Event: \'onclick\', Action: \'deleteThePerson\'">X</a></li>';
// and load the html we need into that document
$doc2->loadHTML($s);

// Now we can append the node from `doc2` into `doc1`
$element->appendChild($doc1->importNode($doc2->getElementsByTagName('li')[0], true));

echo $doc1->saveHTML();
  

您需要记住的重要一点是,您必须使用importNode方法才能将nodedoc2移至doc1。只有在导入该节点后 - 您才能使用appendChild功能。

上例中的输出为:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p><li>Person <b>{{ $name }}</b> is  <span>{{ $age }}</span> years old. <a href="" data-id="{{ $id }}" data-event="Event: 'onclick', Action: 'deleteThePerson'">X</a></li></p></body></html>