Comment insérer du contenu XmlCursor dans un document DOM
Question
Certaines API me renvoient XmlCursor en pointant sur la racine du document XML. Je dois insérer tout cela dans un autre document représenté par org.w3c.DOM.
Au début:
XmlCursor pointant sur
<a>
<b>
some text
</b>
</a>
Document DOM:
<foo>
</foo>
<foo> <someOtherInsertedElement> <a>
<b>
some text
</b>
</a> </someOtherInsertedElement>
À la fin, je souhaite que le document DOM original soit modifié comme suit:
document.importNode(cursor.getDomNode())
<=>
REMARQUE: <=> ne fonctionne pas - une exception est levée: NOT_SUPPORTED_ERR: l'implémentation ne prend pas en charge le type d'objet ou d'opération demandé.
La solution
Essayez quelque chose comme ça:
Node originalNode = cursor.getDomNode();
Node importNode = document.importNode(originalNode.getFirstChild());
Node otherNode = document.createElement("someOtherInsertedElement");
otherNode.appendChild(importNode);
document.appendChild(otherNode);
Donc en d'autres termes:
- Récupère le nœud DOM à partir du curseur. Dans ce cas, il s’agit d’un document DOMDocument, donc getFirstChild () pour obtenir le noeud racine.
- Importez-le dans le DOMDocument.
- Faites d'autres choses avec le DOMDocument.
- Ajoutez le noeud importé au bon noeud.
La raison de l’importation est qu’un nœud est toujours " appartient à " à un DOMDocument donné. Le simple ajout du noeud d'origine provoquerait des exceptions.
Autres conseils
J'avais le même problème.
Cela échouait:
Node importNode = document.importNode(originalNode);
Ceci a résolu le problème:
Node importNode = document.importNode(originalNode.getFirstChild());