Java中让JAXB输出格式化XML,关键在于设置Marshaller.JAXB_FORMATTED_OUTPUT为true;启用后自动添加两空格缩进和换行,但不可配置缩进符类型或宽度。
Java中让JAXB输出格式化(带缩进)的XML,关键在于配置Marshaller的Marshaller.JAXB_FORMATTED_OUTPUT属性为true。
在调用marshal()之前,设置格式化开关即可:
Marshaller实例后,调用setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true)
Boolean.TRUE或true(推荐用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); // 输出到控制台,带缩进
若输出到文件,可传入FileOutputStream或FileWriter,格式化效果同样生效。
JAXB内置的格式化仅添加基本缩进和换行,但有几点限制:

\n),这是正常行为)不展开为,格式化不影响元素语法如果需要自定义缩进宽度、添加DOCTYPE、或处理特殊字符转义,可结合Transformer:
DOMSource或字符串TransformerFactory创建Transformer,设置OutputKeys.INDENT和"{http://xml.apache.org/xslt}indent-amount"