2009-05-21 14 views
20

questo è come mi creo esempio XStream per XML:Come disabilitare la stampa (spazio bianco/nuova riga) in XStream?

XStream xstream = new XStream(); 

Questo è per JSON:

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

Entrambi sono abbastanza-stampa (indentazione) l'uscita.

Come posso chiedere a XStream di disabilitare la stampa carina?

+0

Come definire la propria stampa Writer. pretty-Print Writer non è sufficiente per le mie esigenze. Voglio una nuova riga dopo ogni attributo ed elemento. Come deve essere fatto? http://stackoverflow.com/questions/8943000/format-xml-generated-by-xstream – Mady

risposta

11

Con un po 'di aiuto da parte della comunità, ho capito la risposta.

Per XML è necessario cambiare il modo in cui si serializzare:

La linea:

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

cambiato per allineare

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

Per JSON si modifica solo il modo in cui viene creato XStream. Così l'inizializzazione del xstream viene modificato in:

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

Nota che il costruttore di JsonWriter 4 parametri viene utilizzato.

+0

Come definire il proprio writer di stampa. pretty-Print Writer non è sufficiente per le mie esigenze. Voglio una nuova riga dopo ogni attributo ed elemento. Come deve essere fatto? – Mady

+0

Come possiamo aggiungere prolog o foglio di stile usando CompactWriter? Stavo usando il nuovo metodo Writer() per scrivere prolog e fogli di stile, ma CompactWriter non ha questa funzione. – abi1964

4

utilizzare il metodo Marschal su XStream con uno scrittore compatto

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

Qual è la differenza tra "marshal" e "toXML"? Questo è quello che uso ora: xStream.toXML (o, nuovo OutputStreamWriter (stream, encoding)); – IgorM

+1

Apparentemente il CompactWriter funziona solo per XML. Ho modificato il mio comando al seguente e ora ottengo sempre XML, anche se ho bisogno di JSON: xStream.marshal (o, nuovo CompactWriter (nuovo OutputStreamWriter (stream, encoding))); – IgorM

+0

Vedere JavaDoc - toXML: serializzare un oggetto su una stringa XML piuttosto stampata. - marschal: serializza e oggetto in una struttura gerarchica di dati (come XML). Quindi con lo sceriffo ottieni alcune opzioni di output. Non ci sono cuciture per essere una tale opzione per JSON. – Mork0075

18

Grazie, i tuoi messaggi hanno aiutato !!! Ecco cosa uso per convertire in una stringa.

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

Il comportamento predefinito di pretty-printing deriva dal metodo AbstractXmlDriver.createWriter() (XStream usa XppDriver come il suo conducente flusso gerarchico predefinito e questo si estende AbstractXmlDriver):

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

Se si desidera disabilitare la stampa a livello globale (pur mantenendo tutti gli altri comportamenti predefiniti) e utilizzare semplicemente il semplice metodo toXML (o) piuttosto che fare confusione con le altre opzioni per uso suggerite qui, è possibile inizializzare l'istanza XStream come segue. Questo sostituisce il metodo precedente con un CompactWriter.

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