2017-01-02 4 views
0

私はこのような要素ののnodeValueを設定しようとしています:関数は次のようになり、HTMLを返しPHP DOMNODEのnodeValue >&LT問題

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

get_include_contents

<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;に置き換えられます。それを修正するには?どのように他のHTMLを含む要素の内部HTMLを設定するには?

答えて

0

あなたはappendChildなくnodeValueメソッドを使用する必要がありますあなたのDOMツリーにhtmlブロックを追加したい場合。

問題

は、あなたが 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(); 

あなたが覚えておく必要がある重要なことは、あなたがdoc1doc2からそのnodeを移動するためにimportNodeメソッドを使用しなければならないということです。そのノードをインポートした後でのみ、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> 
+0

それは言う:DOMNODE TO :: APPENDCHILDを(PASSED 'ARGUMENT 1)DOMNODEのインスタンスでなければなりません、BOOLEAN GIVEN' – durisvk

+0

ときIこれを行う 'public static function setInnerHTML(\ DOMDocument $ dom、\ DOMNode&$ element、$ html_string){ $ dom2 = new \ DOMDocument(); $ dom2-> loadHTML($ html_string); $ element-> appendChild($ dom-> importNode($ dom2-> firstChild)); } ' – durisvk

+0

'&$ dom'を使用し、 'importNode'メソッドの2番目のパラメータをnodeに割り当てるべきことはほとんど確信しています。 – Dekel

関連する問題