可用Java内置Transformer类配合DOM解析器格式化XML字符串,核心是解析为Document后设置OutputKeys.INDENT为"yes"及缩进空格数(JDK 8+需额外设置indent-amount),再通过transform输出;对不规范XML需预校验或包裹临时根标签;第三方库如jsoup、dom4j亦可实现但需引入依赖。

可以用Java内置的Transformer类配合DOM解析器来格式化XML字符串,核心是将字符串解析为Document对象,再用Transformer输出带缩进的XML。
使用Transformer实现XML美化
这是最常用、无需第三方依赖的方式。关键在于设置OutputKeys.INDENT为"yes",并指定缩进空格数(如4个):
- 先用DocumentBuilder将XML字符串解析成Document对象
- 创建Transformer实例,设置输出属性:编码、缩进、缩进空格数
- 用DOMSource和StringWriter配合transform()方法获取美化后的字符串
setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4")才能生效缩进值,仅设"yes"默认只缩进2格。
处理不规范的XML输入
如果原始字符串缺少根节点或含非法字符,DocumentBuilder.parse()会抛异常。建议先做基础校验:
- 用String.trim()去除首尾空白
- 检查是否以
- 包裹一层临时根标签(如
... )再解析,格式化后再去掉
替代方案:使用第三方库(如jsoup或dom4j)
若项目已引入jsoup,可利用其HTML/XML解析能力快速美化:
立即学习“Java免费学习笔记(深入)”;
- jsoup.parse(xmlStr, "", Parser.xmlParser()).toString() 自动带缩进
- dom4j的DocumentHelper.parseText(str).asXML()也支持格式化输出,但需显式配置OutputFormat.createPrettyPrint()
这类方式更简洁,但会引入额外依赖,适合已有对应库的项目。










