Java: cómo obtener xml completo almacenado en un documento DOM modificado

Estoy usando el analizador Java DOM estándar para procesar un archivo xml-

Lo he procesado e realizado cambios en el documento xml, ahora quiero ver el xml modificado. ¿Cómo almaceno el XML modificado en una variable de cadena?

Para su referencia, el código que estoy usando se da a continuación:

        str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><config><var-def name=\"initial_no\">3972971</var-def><var-def name=\"webpage\">asdf</var-def><cloudwhile condition=\"${i.toInt() != 500}\" index=\"i\" returnvalue=\"false\" indexstart=\"1\" upperbound=\"500\"><var-def name=\"webpage\" overwrite=\"true\"><cloudwhile condition=\"${i.toInt() != 500}\" index=\"i\" returnvalue=\"false\" indexstart=\"100\" upperbound=\"700\"></cloudwhile><try><body><http url=\"www.google.com/patents/US${initial_no.toInt()+i.toInt()}\"/></body><catch>ERROR- No content found for this patent number.</catch></try></var-def><file action=\"write\" path=\"data/${initial_no.toInt()+i.toInt()}_content.html\"><var name=\"webpage\"/></file></cloudwhile></config>";
        InputStream is = new ByteArrayInputStream(str.getBytes("UTF-8"));
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(is);
                    //some processing..
Respuesta 1

Puedes usar Transformer API para hacer lo que quieras:

import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.OutputKeys;
import javax.xml.transform.stream.StreamResult;

class SaveDom 
{
    public static void main(String[] args) throws Exception
    {
        String str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><config><var-def name=\"initial_no\">3972971</var-def><var-def name=\"webpage\">asdf</var-def><cloudwhile condition=\"${i.toInt() != 500}\" index=\"i\" returnvalue=\"false\" indexstart=\"1\" upperbound=\"500\"><var-def name=\"webpage\" overwrite=\"true\"><cloudwhile condition=\"${i.toInt() != 500}\" index=\"i\" returnvalue=\"false\" indexstart=\"100\" upperbound=\"700\"></cloudwhile><try><body><http url=\"www.google.com/patents/US${initial_no.toInt()+i.toInt()}\"/></body><catch>ERROR- No content found for this patent number.</catch></try></var-def><file action=\"write\" path=\"data/${initial_no.toInt()+i.toInt()}_content.html\"><var name=\"webpage\"/></file></cloudwhile></config>";
        InputStream is = new ByteArrayInputStream(str.getBytes("UTF-8"));
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(is);

        // Write out the xml file
        // Use a Transformer for output
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = tFactory.newTransformer();
        transformer.setOutputProperty(OutputKeys.METHOD, "xml");
        transformer.setOutputProperty( OutputKeys.INDENT, "yes" );
        transformer.setOutputProperty("encoding", "UTF-8");

        DOMSource source = new DOMSource(doc);
        java.io.StringWriter sw = new java.io.StringWriter();
        StreamResult _result = new StreamResult(sw);
        transformer.transform(source, _result);
        String out = sw.toString();
        System.out.println(out);
    }
}
Respuesta: 2

Necesito agregar una imagen CMYK (java.awt.BufferedImage) a un documento PDF con iText. Estoy tratando de hacerlo con: com.lowagie.text.Image img = Image.getInstance (BufferedImage, bgColor); Esto produce un ...

Clase base animal clase pública Animal {cerdo de cordel protegido; perro de cuerda protegido; gato de cuerda protegido; public void setPig (String pig_) {pig = pig_; } public void setCat (String cat_) {cat = ...

Actualmente estoy desarrollando una aplicación para teléfonos móviles (teléfonos inteligentes). Mi mente ha tomado el camino de distribuir la aplicación en dos versiones diferentes. Uno que es gratuito pero tiene adiciones y ...

Tengo un objeto GOval, vamos a llamarlo círculo que estoy usando en un applet. Agregué el objeto GOval al contenedor y luego debajo de la línea donde lo agregué al contenedor escribí las siguientes líneas ...