Wie ein leeres DOMElement erstellen
Frage
Ich bin mit Xerces-c in meinem Projekt, und möchte ein Einzel DOMElement
erstellen, ohne einen ganz neuen DOMDocument
erstellen zu müssen. Ist so etwas möglich?
Lösung
Ich habe keinen Weg gesehen. AFAIK die DOMDocument fungiert als „Speicher-Pool“ und alle Komponenten sind in diesem Pool erstellt. In der Xerces docs wir sehen:
Objekte erstellt von DOMDocument :: createXXXX Benutzer können die Release () Funktion aufrufen, die Freigabe aller verwaisten Knoten anzuzeigen. Wenn ein verwaister Knoten freigegeben wird, die damit verbundenen Kinder werden auch freigegeben werden. Der Zugriff auf eine freigegebene Knoten wird zu unerwartetem Verhalten führen. Dieser verwaiste Knoten wird schließlich freigegeben werden, wenn dies noch nicht getan, wenn sein Besitzer Dokument freigegeben wird
Ich habe um diese Situation gearbeitet, indem sie ein Scratch Pad DOMDocument um und die Verwendung dieser Fragmente oder verwaiste Knoten und die Annahme sie in ihre Zieldokumente zu erstellen, wenn ich bereit bin. Z.
// 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);