¿Realmente no hay forma de escribir directamente XML formateado usando javax.xml.stream.XMLStreamWriter (Java SE 6) ??? Esto es realmente increíble, ya que otras API XML como JAXB y algunas bibliotecas DOM pueden hacer esto. Incluso el .NET XMLStreamWriter equivalente es capaz de este AFAIK (si mal no recuerdo la clase es System.Xml.XmlTextWriter).XMLStreamWriter: indentation
Esto significa que la única opción que tengo es volver a analizar el XML para generar una salida formateada ??
ej .:
StringWriter sw = new StringWriter();
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newFactory();
XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(sw);
writeXml(xmlStreamWriter);
xmlStreamWriter.flush();
xmlStreamWriter.close();
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
StringWriter formattedStringWriter = new StringWriter();
transformer.transform(new StreamSource(new StringReader(sw.toString())), new StreamResult(formattedStringWriter));
System.out.println(formattedStringWriter);
El problema de esta solución es la propiedad "{http://xml.apache.org/xslt}indent-amount". No encontré ninguna documentación al respecto y no parece garantizarse que sea portátil.
¿Qué otras opciones tengo, si quiero hacer esto con las clases estándar de Java 6? ¿Cree un gráfico de objetos JAXB o DOM solo para una bonita impresión?
No puedo encontrar tal método de escritura de texto?!? http://download.oracle.com/javase/6/docs/api/javax/xml/stream/XMLStreamWriter.html – Puce
Hmm, tal vez con writeCharacters, pero pensé que esto solo para contenido de elementos ... – Puce
Está en lo correcto, debería haber sido writeCharacters. Este método se puede usar para insertar texto en cualquier parte de un documento, no solo dentro de un solo elemento. –