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

Tengo un Runnable que tiene un caché (de tipo Cache) y suponemos que ofrece operaciones seguras para subprocesos. Este objeto Runnable es utilizado por múltiples hilos. Nuestros hilos obtienen objetos de fuentes externas ...

import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Scanner; copia de seguridad de clase pública {...

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 ...

Cómo puedo almacenar la consola de salida del servidor en server.log, al igual que la salida de netbeans apache output console server.log para rastrear errores de sql y mostrar system.out.println que he intentado configurar ...