Pregunta

Estoy usando Xerces-c en mi proyecto, y me gustaría crear un DOMElement sin tener que crear un nuevo DOMDocument . ¿Es tal cosa posible?

¿Fue útil?

Solución

No he visto una manera. AFAIK el DOMDocument actúa como el " grupo de memoria " y todos los elementos se crean en este grupo. En los docs de Xerces vemos:

  

Objetos creados por DOMDocument :: createXXXX   Los usuarios pueden llamar a la función de liberación () para indicar la liberación de cualquier nodo huérfano. Cuando se libera un nodo huérfano, también se liberarán los hijos asociados. El acceso a un nodo liberado conducirá a un comportamiento inesperado. Estos nodos huérfanos se liberarán eventualmente, si aún no lo han hecho, cuando se publique su documento de propietario

He resuelto esta situación manteniendo un bloc de notas DOMDocumento y usándolo para crear fragmentos o nodos huérfanos y adoptándolos en sus documentos de destino cuando esté listo. Por ejemplo,

// 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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top