Domanda

Sto usando Xerces-c nel mio progetto e vorrei creare un singolo DOMElement senza dover creare un DOMDocument completamente nuovo. È possibile una cosa del genere?

È stato utile?

Soluzione

Non ho visto un modo. AFAIK il DOMDocument funge da "pool di memoria" e tutti gli elementi vengono creati in questo pool. In Xerces docs vediamo:

  

Oggetti creati da DOMDocument :: createXXXX   Gli utenti possono chiamare la funzione release () per indicare il rilascio di qualsiasi nodo orfano. Quando viene rilasciato un nodo orfano, verranno rilasciati anche i relativi figli associati. L'accesso a un nodo rilasciato porterà a comportamenti imprevisti. Questi nodi orfani verranno infine rilasciati, se non lo sono già stati, quando verrà rilasciato il documento del proprietario

Ho aggirato questa situazione mantenendo un scratch pad DOMDocument e usandolo per creare frammenti o nodi orfani e adottandoli nei documenti di destinazione quando sono pronto. Per es.

// 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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top