tutorial java xml json xstream

java - tutorial - ¿Cómo deshabilitar la impresión bonita(espacio en blanco/nueva línea) en XStream?



xstream java tutorial (4)

Así es como creo la instancia de XStream para XML:

XStream xstream = new XStream();

Esto es para JSON:

private final XStream xstream = new XStream(new JsonHierarchicalStreamDriver() { public HierarchicalStreamWriter createWriter(Writer writer) { return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE); } });

Ambos están imprimiendo (sangrando) la salida.

¿Cómo puedo pedirle a XStream que desactive la impresión bonita?


Con la ayuda de la comunidad, he descubierto la respuesta.

Para XML tienes que cambiar la forma en que serializas:

La línea:

xStream.toXML(o, new OutputStreamWriter(stream, encoding));

cambiado a linea

xStream.marshal(o, new CompactWriter(new OutputStreamWriter(stream, encoding)));

Para JSON , solo cambia la forma en que se crea el XStream. Así que la inicialización de XStream se cambia a:

private final XStream xstreamOut = new XStream(new JsonHierarchicalStreamDriver() { public HierarchicalStreamWriter createWriter(Writer writer) { return new JsonWriter(writer, new char[0], "", JsonWriter.DROP_ROOT_MODE); } });

Tenga en cuenta que se utiliza el constructor JsonWriter de 4 parámetros.


El comportamiento predeterminado de pretty-printing proviene del método AbstractXmlDriver.createWriter () (XStream usa XppDriver como su controlador de flujo jerárquico predeterminado y esto amplía AbstractXmlDriver):

public HierarchicalStreamWriter createWriter(Writer out) { return new PrettyPrintWriter(out, getNameCoder()); }

Si desea deshabilitar la impresión bonita globalmente (al tiempo que conserva todos los demás comportamientos predeterminados) y simplemente use el método toXML (o) simple en lugar de meterse con las otras opciones de uso sugeridas aquí, puede iniciar su instancia de XStream de la siguiente manera. Esto reemplaza el método anterior con un CompactWriter en su lugar.

XStream xstream = new XStream(new XppDriver() { @Override public HierarchicalStreamWriter createWriter(Writer out) { return new CompactWriter(out, getNameCoder()); } });


Gracias, tus posts ayudaron !!! Aquí está lo que yo uso para convertir a una cadena.

String strXML = ""; XStream xs = new XStream(); StringWriter sw = new StringWriter(); xs.marshal(this, new CompactWriter(sw)); strXML = sw.toString();


Utilice el método marschal en xstream con un escritor compacto

xstream.marshal(someObject, new CompactWriter(out));