J*a如何设置JAXB输出的XML格式化(带缩进)

J*a中让JAXB输出格式化XML,关键在于设置Marshaller.JAXB_FORMATTED_OUTPUT为true;启用后自动添加两空格缩进和换行,但不可配置缩进符类型或宽度。

java如何设置jaxb输出的xml格式化(带缩进)

J*a中让JAXB输出格式化(带缩进)的XML,关键在于配置MarshallerMarshaller.JAXB_FORMATTED_OUTPUT属性为true

启用格式化输出

在调用marshal()之前,设置格式化开关即可:

  • 获取Marshaller实例后,调用setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true)
  • 该属性值必须是Boolean.TRUEtrue(推荐用true,更简洁)
  • 不设置或设为false时,默认输出为单行无缩进XML

完整示例代码

以下是最小可运行示例:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 可选:指定编码,避免乱码
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
marshaller.marshal(obj, System.out); // 输出到控制台,带缩进

若输出到文件,可传入FileOutputStreamFileWriter,格式化效果同样生效。

吐司AI 吐司AI

超多功能的免费在线生图网站!拥有全网更齐全的模型库,0门槛使用!

吐司AI 325 查看详情 吐司AI

注意换行与缩进行为

JAXB内置的格式化仅添加基本缩进和换行,但有几点限制:

  • 缩进默认使用两个空格(不可直接配置为Tab或4空格)
  • 不会在XML声明后额外空一行(如<?xml ...?>\n<root></root>),这是正常行为
  • 对空元素(如<tag></tag>)不展开为<tag></tag>,格式化不影响元素语法

替代方案:使用Transformer(如需精细控制)

如果需要自定义缩进宽度、添加DOCTYPE、或处理特殊字符转义,可结合Transformer

  • 先用JAXB marshal为DOMSource或字符串
  • 再用TransformerFactory创建Transformer,设置OutputKeys.INDENT"{http://xml.apache.org/xslt}indent-amount"
  • 这种方式更灵活,但多一步转换,一般场景无需

以上就是J*a如何设置JAXB输出的XML格式化(带缩进)的详细内容,更多请关注其它相关文章!

本文转自网络,如有侵权请联系客服删除。