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?

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top