DOMDocumentFragment 只有在從父 DOMDocument 建立時才有用,例如:
1. $dom = new DOMDocument("1.0","UTF-8");
2. $docFrag = $dom->createDocumentFragment();
3. 現在將項目附加到 $docFrag
4. 將 $docFrag 的內容移植回 $dom 的所需位置
反之,採用這種方法
1. $dom = new DOMDocument("1.0","UTF-8");
2. $docFrag = new DOMDocumentFragment();
3. 現在將項目附加到 $docFrag
...在步驟 3 會因「唯讀」錯誤而失敗,因為 $docFrag 並非建立為 DOMDocument 的子項。
我不確定這樣做的原因:網路上有人說是基於安全性考量,也有人說是設計不良,但無論原因為何,當想要將通用的獨立 DocumentFragments 封裝到類別中以便輕鬆移植到所需的樹狀結構時,這真的會造成限制。我看過的唯一解決方法,從效能角度來看似乎很昂貴,從編碼角度來看也很麻煩,例如:建立一個虛擬的 $dom 供臨時使用。
(這在 PHP 5.3 中有效)我把它放在這裡是因為我花了很多時間才弄清楚 - 我希望這可以為其他人省去一些麻煩。
使用 new DOMDocumentFragment