0
我使用的是周圍的PHP5級DOM文檔的一個包裝生成HTML我以後工作了。這使得使用DOM修改HTML變得很容易。的DOMNode參考不追加到另一個元素兩次
一個例子是創建元素#1和將其添加到元件#2,並且仍然能夠直接修改元件#1。
甲問題然而產生了以下內容:
- 元#1被添加到元件#2
- 元#2加入到元件#3
- 元#1被修改,但不改變是在元件#3的DOM可見(其包含#1和#2)
的簡化示例代碼:
<?php
$doc1 = new DOMDocument();
$el1 = $doc1->createElement('h1', 'Hello');
$doc1->appendChild($el1);
$doc2 = new DOMDocument();
$el2 = $doc2->createElement('h2', 'World');
$doc2->appendChild($el2);
$doc3 = new DOMDocument();
$el3 = $doc3->createElement('h3', 'Today');
$doc3->appendChild($el3);
// Import el1 into el2
$el1 = $doc2->importNode($el1, true);
$el2->appendChild($el1);
$doc1 = $doc2;
// Import el2 into el3
$el2 = $doc3->importNode($el2, true);
$el3->appendChild($el2);
$doc2 = $doc3;
// Modify el1
$el1->nodeValue = "Boo"; // This doesn't work?
//$el2->nodeValue = "Boo"; // Changing element2 or 3 works...
// Display result
echo $doc3->saveHTML();
?>`
修改$ EL2仍然是可能的,因爲它是深拷貝,並添加到$ EL3的DOM。然而,$ el1仍然指向$ doc2/$ el2的DOM,並且任何更改都不會反映在$ el3的DOM中。
是否有任何通用的方法來直接指向$ EL1在$ EL3的DOM正確的節點?
啊。我懂了。 $ el2是實際添加到$ el3的深層副本。因此修改$ el2也反映在$ el3的DOM中。 在這種情況下,我需要一些通用的方法來$ EL1設置爲$ EL3的DOM相應的節點。我編輯了原始問題。 – dutchmega 2010-06-02 19:09:20
無論如何,結果是一個_valid_ XHTML文檔嗎? – VolkerK 2010-06-02 21:16:24