Как создать пустой DOMElement - PullRequest
       11

Как создать пустой DOMElement

2 голосов
/ 22 октября 2008

Я использую Xerces-c в своем проекте и хотел бы создать один DOMElement без необходимости создания совершенно нового DOMDocument. Возможна ли такая вещь?

1 Ответ

2 голосов
/ 22 октября 2008

Я не видел пути. AFAIK DOMDocument действует как «пул памяти», и все элементы создаются в этом пуле. В Xerces документах мы видим:

Объекты, созданные DOMDocument :: createXXXX Пользователи могут вызывать функцию release (), чтобы указать освобождение любых потерянных узлов. Когда освобожденный узел освобождается, связанные с ним дети также будут освобождены. Доступ к освобожденному Узлу приведет к неожиданному поведению. Эти осиротевшие узлы будут в конечном итоге выпущены, если это еще не сделано, когда будет выпущен документ владельца 10000 *

Я обошел эту ситуацию, сохранив блокнот DOMDocument и используя его для создания фрагментов или потерянных узлов и принятия их в свои документы назначения, когда я буду готов. Э.Г.

// 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);
...