Pergunta

Eu estou usando Xerces-C no meu projeto, e gostaria de criar uma única DOMElement sem ter que criar uma nova DOMDocument todo. É tal coisa possível?

Foi útil?

Solução

Eu não vi uma maneira. AFAIK o DOMDocument atua como o "pool de memória" e todos os elementos são criados nessa piscina. No Xerces docs vemos:

objetos criados por DOMDocument :: createXXXX Os usuários podem chamar a função de desbloqueio () para indicar a liberação de todos os nós órfãos. Quando um nó órfão é liberada, seus filhos associados também será lançado. Acesso a um nó liberado vai levar a um comportamento inesperado. Estes Nodes órfãs acabará por ser libertado, se já não fez isso, quando o seu documento proprietário é liberado

Eu tenho trabalhado em torno desta situação, mantendo um scratch pad DOMDocument em torno e usá-lo para criar fragmentos ou nós órfãos e adotá-las em seus documentos de destino quando eu estou pronto. Por exemplo.

// 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top