什么属性用于更改 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");
最佳答案
没有可以自定义的属性。大多数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.replaceAll("\r?\n", "\r\n"); // only convert if necessary
为避免对性能产生任何影响,您必须在 java.io.StringWriter
的构造函数中设置近似大小(例如 1024 -> 2 KB
) .
关于java - 如何更改 JAXB Marshaller 行分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18668569/