java - 如何更改 JAXB Marshaller 行分隔符?

标签 java file-io jaxb marshalling

什么属性用于更改 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/

相关文章:

c# - 如何创建和解析相对路径?

javascript - 我如何找出文件是否在 Node.js 的目录中?

java - 使用 JAXB 编码 xml 期间忽略 null 标签

java - 如何使用 JAXB 解析 Java 中的嵌套 XML 对象列表?

java - 将字符串转换为日期对象

java - (CMD) 退出后我想做点什么

java - ^M (ctrl+M) 字符是字符串的一部分,但 java 获取行尾

java - 代号一,更改代码内多按钮文本的颜色,而不是 GUI

linux - fwrite 的剖析

java - 在 Ant 中从 JAXB 类文件生成 XML 模式