Como inserir conteúdo XmlCursor para DOM Document
Pergunta
Alguns API retorna me XmlCursor apontando na raiz do documento XML. Eu preciso inserir tudo isso em outro documento representado org.w3c.dom.
No início:
XmlCursor poiting em
<a>
<b>
some text
</b>
</a>
DOM Documento:
<foo>
</foo>
No final eu quero ter documento DOM originais mudou assim:
<foo>
<someOtherInsertedElement>
<a>
<b>
some text
</b>
</a>
</someOtherInsertedElement>
</foo>
NOTA:. document.importNode(cursor.getDomNode())
não funciona - exceção é lançada: NOT_SUPPORTED_ERR: A implementação não suporta o tipo pedido de objeto ou operação
Solução
Tente algo parecido com isto:
Node originalNode = cursor.getDomNode();
Node importNode = document.importNode(originalNode.getFirstChild());
Node otherNode = document.createElement("someOtherInsertedElement");
otherNode.appendChild(importNode);
document.appendChild(otherNode);
Assim, em outras palavras:
- Obter o nó DOM do cursor. Neste caso, é um DOMDocument, então, fazer getFirstChild () para obter o nó raiz.
- importá-lo para o DOMDocument.
- fazer outras coisas com o DOMDocument.
- Anexar o nó importado para o nó direito.
A razão para importação é que um nó sempre "pertence" a uma determinada DOMDocument. Basta adicionar o nó original causaria exceções.
Outras dicas
Eu estava tendo o mesmo problema.
Este estava falhando:
Node importNode = document.importNode(originalNode);
Esta corrigiu o problema:
Node importNode = document.importNode(originalNode.getFirstChild());