Pour ce que ça vaut, voici une solution que j'ai trouvée en utilisant la fonction dom4j bibliothèque. (J'ai vérifié que cela fonctionne).
Lire le fragment XML dans un fichier org.dom4j.Document
(note : toutes les classes XML utilisées ci-dessous sont issues de org.dom4j ; voir l'annexe) :
String newNode = "<node>value</node>"; // Convert this to XML
SAXReader reader = new SAXReader();
Document newNodeDocument = reader.read(new StringReader(newNode));
Obtenez ensuite le document dans lequel le nouveau noeud est inséré, et l'élément parent (à être) de celui-ci. (Votre org.w3c.dom.Document devrait être converti en org.dom4j.Document ici). À des fins de test, j'en ai créé un comme ceci :
Document originalDoc =
new SAXReader().read(new StringReader("<root><given></given></root>"));
Element givenNode = originalDoc.getRootElement().element("given");
L'ajout d'un nouvel élément enfant est très simple :
givenNode.add(newNodeDocument.getRootElement());
Terminé. Sortie de originalDoc
donne maintenant :
<?xml version="1.0" encoding="utf-8"?>
<root>
<given>
<node>value</node>
</given>
</root>
Annexe : Parce que votre question parle de org.w3c.dom.Document
Voici comment convertir cette valeur en une autre. org.dom4j.Document
.
// dom4j -> w3c
DOMWriter writer = new DOMWriter();
org.w3c.dom.Document w3cDoc = writer.write(dom4jDoc);
// w3c -> dom4j
DOMReader reader = new DOMReader();
Document dom4jDoc = reader.read(w3cDoc);
(Si vous avez besoin de ces deux types de Document
régulièrement, il pourrait être judicieux de les placer dans des méthodes utilitaires soignées, peut-être dans une classe appelée XMLUtils
ou quelque chose comme ça).
Il existe peut-être de meilleures façons de procéder, même sans bibliothèques tierces. Mais parmi les solutions présentées jusqu'à présent, c'est à mon avis la plus simple, même si vous devez effectuer les conversions dom4j <-> w3c.
Mise à jour (2011) : avant d'ajouter la dépendance dom4j à votre code, notez que c'est no un projet activement maintenu, et a quelques autres problèmes aussi . La version 2.0 améliorée est en préparation depuis longtemps, mais seule une version alpha est disponible. Vous pouvez envisager une alternative, comme XOM, à la place ; lisez-en plus dans la question liée ci-dessus.