2009-05-21 23 views
20

これは私がXMLのためにXStreamのインスタンスを作成する方法である:XStreamでpretty-printing(空白/改行)を無効にするには?

XStream xstream = new XStream(); 

これはJSONのためです:

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

人ともかなり印刷出力を(インデント)されています。

かなり印刷を無効にするようにXStreamに問い合わせるにはどうすればよいですか?

+0

独自の印刷ライタを定義する方法。かわいいプリントライターは私の必要を満たしていません。すべての属性と要素の後に改行が必要です。それはどうやって行なわれるのですか? http://stackoverflow.com/questions/8943000/format-xml-generated-by-xstream – Mady

答えて

11

とXStreamの上marschalメソッドを使用して、私は答えを考え出しました。あなたがシリアライズどのような方法を変更する必要がXMLについては

ライン:あなたが唯一の変更JSONについては

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

を並べるように変更

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

XStreamの作成方法4パラメータJsonWriterコンストラクタが使用されていることを

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

注:だからXStreamのの初期化に変更されます。

+0

独自の印刷ライタを定義する方法。かわいいプリントライターは私の必要を満たしていません。すべての属性と要素の後に改行が必要です。それはどうやって行なわれるのですか? – Mady

+0

CompactWriterを使用してプロローグまたはスタイルシートを追加するにはどうすればよいですか?私は新しいWriter()。writeメソッドを使用してプロローグとスタイルシートを追加していましたが、CompactWriterにはこの機能がありません。 – abi1964

4

は、コミュニティからいくつかの助けを借りて、コンパクトな作家

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

「マーシャル」と「toXML」の違いは何ですか? これは私が今使っているものです: xStream.toXML(o、new OutputStreamWriter(stream、encoding)); – IgorM

+1

明らかに、CompactWriterはXMLに対してのみ機能します。私は次のコマンドにコマンドを変更しましたが、今はJSONが必要な場合でも常にXMLを取得しています: xStream.marshal(new、CompactWriter(new OutputStreamWriter(stream、encoding))); – IgorM

+0

を参照してください。JavaDoc - toXML:オブジェクトをシンプルに印刷されたXML文字列にシリアル化します。 - marschal:階層化されたデータ構造(XMLなど)にシリアル化してオブジェクト化します。マーシャルを使用すると、いくつかの出力オプションが得られます。 JSONにはこのようなオプションがあるはずです。 – Mork0075

18

ありがとうございました。ここで私はStringに変換するために使用します。あなたがしたい場合は

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

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

プリティプリントのデフォルトの動作はAbstractXmlDriver.createWriter()メソッド(XStreamのは、そのデフォルト階層ストリームドライバとしてXppDriverを使用しており、これはAbstractXmlDriverを拡張する)から来ています(ここで提案されている他の用途ごとのオプションを使いこなすのではなく)シンプルなtoXML(o)メソッドを使用するだけで、XStreamインスタンスを次のように初期化できます。これは、上記のメソッドを代わりにCompactWriterでオーバーライドします。

XStream xstream = new XStream(new XppDriver() { 
    @Override 
    public HierarchicalStreamWriter createWriter(Writer out) { 
     return new CompactWriter(out, getNameCoder()); 
    } 
}); 
関連する問題