Cómo formatear xml usando Java

El kit de desarrollo java contiene el paquete javax.xml.transform para manipular el contenido xml. El objeto transformador recibe una entrada que contiene el XML. El transformador aplica la transformación usando el método de transformación.

Ejemplo:

Este ejemplo crea una cadena de entrada que contiene xml que no está sangrado. Luego crea un transformador usando TransformerFactory. El transformador está configurado para sangrar el xml. El tamaño de la sangría es 2. Se llama al método de transformación, la salida del proceso se escribe en System.out. Si se produce un error como que el xml no es válido, el mensaje de error también se escribe en la salida.

import java.io.StringReader;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class XmlFormatter {

    public static void main(String[] argv) {

	final String input = "<a><b>test</b><c>test2</c></a>";
	
	java.io.StringWriter xmlResultResource = new java.io.StringWriter();
	Transformer xmlTransformer = null;
	try {
	    xmlTransformer = TransformerFactory.newInstance().newTransformer();

	    xmlTransformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
	    xmlTransformer.setOutputProperty(OutputKeys.INDENT, "yes");
	} catch (TransformerConfigurationException e) {
	    System.out.println( "Transformer configuration error: " + e.getMessage() );
	    return;
	}

	try {
	    xmlTransformer.transform(new StreamSource(new StringReader(input)),
		    new StreamResult(xmlResultResource));
	} catch (TransformerException e) {
	    System.out.println("Error transform: " + e.getMessage());
	    return;
	}

	final String output = xmlResultResource.getBuffer().toString();

	System.out.println( "input:" );
	System.out.println( input  );

	System.out.println( "output:" );
	System.out.println( output  );
    }

}

El resultado será:

input:
<a><b>test</b><c>test2</c></a>
output:
<?xml version="1.0" encoding="UTF-8"?><a>
  <b>test</b>
  <c>test2</c>
</a>


Referencias

XML Wikipedia