如何更改JAXB Marshaller行分隔符?

时间:2013-09-07 00:46:11

标签: java file-io jaxb marshalling

使用什么属性来更改Marshaller(javax.xml.bind.Marshaller)行分隔符(回车符,换行符,换行符)?

我相信marshaller正在使用系统的行分隔符。

System.getProperty("line.separator")

然而,需要不同的转义序列(即\r\n需要更改为\n,反之亦然。

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

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

1 个答案:

答案 0 :(得分:6)

没有可以自定义的属性。大多数implementations直接向行缓冲区发送行分隔符:

write('\n');

但是,您可以替换结果。

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)。