如何使用Java Transformer在XML文件中去除空白节点并消除缩进与换行?
- 内容介绍
- 相关推荐
本文共计867个文字,预计阅读时间需要4分钟。
由于Transformer默认不压缩格式,会将源XML中的文本节点(包括换行、缩进、空白格)原样保留为:
- 常见错误现象:
Node.getNodeType() == Node.TEXT_NODE却发现内容是" ",导致遍历时误判子节点数量或内容为空 - 使用场景:生成配置文件、序列化 DTO、对接要求严格 XML 结构的第三方系统(如某些 SOAP 接口)
- 关键点:问题分两层——DOM 构建阶段是否忽略空白、输出阶段是否抑制缩进。只改输出不解决 DOM 内部的冗余
#text节点
如何在 DOM 解析阶段就丢弃空白文本节点
最彻底的办法是在用 DocumentBuilder 加载 XML 时启用 setIgnoringElementContentWhitespace(true),但注意它只对 DTD/XSD 声明了元素内容模型(如 element)的文档生效,纯 XML 没声明时无效。
本文共计867个文字,预计阅读时间需要4分钟。
由于Transformer默认不压缩格式,会将源XML中的文本节点(包括换行、缩进、空白格)原样保留为:
- 常见错误现象:
Node.getNodeType() == Node.TEXT_NODE却发现内容是" ",导致遍历时误判子节点数量或内容为空 - 使用场景:生成配置文件、序列化 DTO、对接要求严格 XML 结构的第三方系统(如某些 SOAP 接口)
- 关键点:问题分两层——DOM 构建阶段是否忽略空白、输出阶段是否抑制缩进。只改输出不解决 DOM 内部的冗余
#text节点
如何在 DOM 解析阶段就丢弃空白文本节点
最彻底的办法是在用 DocumentBuilder 加载 XML 时启用 setIgnoringElementContentWhitespace(true),但注意它只对 DTD/XSD 声明了元素内容模型(如 element)的文档生效,纯 XML 没声明时无效。

