2009-05-21 9 views
20

Esto es cómo creo ejemplo xstream para XML:Cómo deshabilitar la impresión bonita (espacio en blanco/nueva línea) en XStream?

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 son bastante impresión (sangría) la salida.

¿Cómo puedo solicitar al XStream que desactive la bonita impresión?

+0

Cómo definir el propio escritor de impresión. Pretty-Print Writer no es suficiente para mis necesidades. Quiero nueva línea después de cada atributo y elemento. ¿Cómo se hará eso? http://stackoverflow.com/questions/8943000/format-xml-generated-by-xstream – Mady

Respuesta

11

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

Para XML usted tiene que cambiar la forma en cómo se serializa:

La línea:

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

cambió a la línea

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

Para JSON sólo cambiar el forma en que se crea el XStream. Por lo que la inicialización de la 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 4 parámetros JsonWriter constructor.

+0

Cómo definir el propio escritor de impresión. Pretty-Print Writer no es suficiente para mis necesidades. Quiero nueva línea después de cada atributo y elemento. ¿Cómo se hará eso? – Mady

+0

¿Cómo podemos agregar prolog o stylesheet usando CompactWriter? Estaba usando el nuevo método Writer(). Write para agregar prolog y hojas de estilo, pero CompactWriter no tiene esta función. – abi1964

4

utilizar el método de Marschal en xstream con un escritor compacta

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

¿Cuál es la diferencia entre "marshal" y "toXML"? Esto es lo que uso ahora: xStream.toXML (o, nuevo OutputStreamWriter (transmisión, codificación)); – IgorM

+1

Aparentemente, el CompactWriter solo funciona para XML. Modifiqué mi comando al siguiente y ahora recibo siempre XML, incluso si necesito JSON: xStream.marshal (o, nuevo CompactWriter (new OutputStreamWriter (transmisión, codificación))); – IgorM

+0

Ver JavaDoc - toXML: Serializar un objeto a una cadena XML bastante impresa. - marschal: Serializar y oponerse a una estructura de datos jerárquica (como XML). Entonces con Mariscal obtienes algunas opciones de salida. No hay ninguna otra opción para JSON. – Mork0075

18

Gracias, sus publicaciones ayudaron !!! Esto es lo que 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(); 
1

El comportamiento predeterminado de impresión bonita viene del método AbstractXmlDriver.createWriter() (xstream utiliza XppDriver como su piloto de flujo jerárquico predeterminado y esto se extiende AbstractXmlDriver):

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

Si desea inhabilite la impresión bonita globalmente (conservando todos los demás comportamientos predeterminados) y simplemente utilice el método simple toXML (o) en lugar de jugar con las otras opciones de uso que se sugieren aquí, puede inicializar su instancia 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()); 
    } 
}); 
Cuestiones relacionadas