2008-10-21 84 views

回答

2

我还没有看到一种方法。 AFAIK DOMDocument充当“内存池”,所有元素都在这个池中创建。在Xerces的docs我们看到:通过DOM文档:: createXXXX 用户创建可以调用释放()函数来表示所有孤立节点释放

对象。当一个孤儿节点被释放时,其相关的孩子也将被释放。访问已发布的节点将导致意外的行为。这些孤立节点最终会被释放,如果不这样做的话,它的主人文件发布

我已经保持便笺围绕DOM文档,并使用它来创建片段或孤儿解决这种情况下工作时,节点并在我准备好时将它们采用到目标文档中。例如。

// Create a fragment holding two sibling elements. The first element also has a child. 
DOMDocumentFragment* frag = scratchDom->createDocumentFragment(); 
DOMNode* e1 = frag->appendChild(frag->getOwnerDocument()->createElement("e1")); 
e1->appendChild(e1->getOwnerDocument()->createElement("e1-1")); 
DOMNode* e2 = frag->appendChild(frag->getOwnerDocument()->createElement("e2")); 
... 
// Paste the contents of the fragment into a "parent" node from another document 
DOMNode* parentFromOtherDom = ...; 
parentFromOtherDom->appendChild(parentFromOtherDom->getOwnerDocument()->adopt(frag)); 
scratchDom->removeChild(frag);