11

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

我相信编组器正在使用系统的行分隔符。

System.getProperty("line.separator")

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

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

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

1 回答 1

8

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

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.replaceAll("\r?\n", "\r\n");  // only convert if necessary

为避免对性能产生任何影响,您必须1024 -> 2 KB在构造函数中为java.io.StringWriter.

于 2013-09-07T00:53:24.837 回答