2013-09-07 27 views
6

Marshaller(javax.xml.bind.Marshaller)行区切り記号(改行、改行、改行)を変更するために使用されるプロパティは何ですか?JAXB Marshallerの行区切り記号を変更するには?

私はマーシャルがシステムのラインセパレータを使用していると思います。

System.getProperty("line.separator") 

しかし異なるエスケープシーケンスが必要とされる(すなわち、\r\n\nまたはその逆に変更する必要があります)。

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

marshaller.setProperty("line.separator", "\r\n"); 

答えて

6

カスタマイズできるプロパティはありません。しかし、あなたは結果を置き換えることができます

write('\n'); 

:ほとんどのimplementationsは、行区切りをバッファに直接送信します。

Marshaller marshaller = ctx.createMarshaller(); 
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); 

StringWriter writer = new StringWriter(1024); // 2 KB 
marshaller.marshal(obj, writer); 

String str = writer.toString(); 
str = str.replace("\n", "\r\n"); 

は、パフォーマンスへの影響を回避するには、 java.io.StringWriterのコンストラクタでのおおよそのサイズ(例えば 1024 -> 2 KB)を設定する必要があります。

+2

これは少し危険ですか?実装が変更された場合、これは "\ r \ n \ n"を生成します。 –

+0

うーん...あなたは正しい!その場合、 'str = str.replaceAll(" \ r?\ n "、" \ r \ n ");' –

関連する問題