Por lo que vale la pena, he aquí una solución que se me ocurrió usar la biblioteca dom4j . (. Yo comprobar que funciona)
Leer el fragmento de XML en un org.dom4j.Document
(nota: todas las clases XML utilizados a continuación son de org.dom4j; véase el Apéndice):
String newNode = "<node>value</node>"; // Convert this to XML
SAXReader reader = new SAXReader();
Document newNodeDocument = reader.read(new StringReader(newNode));
a continuación, obtener el Documento en el cual se inserta el nuevo nodo, y el Elemento padre (a ser) a partir de él. (. Necesitaría Su org.w3c.dom.Document que ser convertido a org.dom4j.Document aquí) Para propósitos de prueba, he creado uno como este:
Document originalDoc =
new SAXReader().read(new StringReader("<root><given></given></root>"));
Element givenNode = originalDoc.getRootElement().element("given");
Añadiendo el nuevo elemento secundario es muy simple:
givenNode.add(newNodeDocument.getRootElement());
Hecho. La salida de originalDoc
ahora rinde:
<?xml version="1.0" encoding="utf-8"?>
<root>
<given>
<node>value</node>
</given>
</root>
Apéndice: Debido a su pregunta habla de org.w3c.dom.Document
, aquí está cómo convertir entre eso y 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 lo que se necesita ambos tipos de Document
s regularmente, podría tener sentido para poner estos en métodos de utilidad aseado, tal vez en una clase llamada XMLUtils
o algo por el estilo.)
Tal vez hay hay mejores formas de hacerlo, incluso sin bibliotecas de terceros. Pero de las soluciones presentadas hasta ahora, en mi opinión, esta es la manera más fácil, incluso si necesita hacer las conversiones dom4j < -> w3c.
Actualización (2011): antes de agregar dependencia dom4j a su código, tenga en cuenta que it is not an actively maintained project, and has some other problems too. La versión mejorada 2.0 ha estado en proceso durante siglos, pero solo hay una versión alfa disponible. Es posible que desee considerar una alternativa, como XOM, en su lugar; Lea más en la pregunta vinculada arriba.
Ver también: http://stackoverflow.com/a/7607435/363573 – Stephan