推荐用 DOM + Transformer 将内容写入 XML 文件:先用 DocumentBuilder 构建内存文档结构,再通过 Transformer 设置 UTF-8 编码和缩进后输出到文件。

Java 中将内容写入 XML 文件,常用方式是使用 DOM、SAX 或更简洁的 JAXP(如 Transformer)配合 DocumentBuilder 构建文档后输出。推荐用 DOM + Transformer,适合中小规模 XML 生成,可控性强、代码清晰。
使用 DOM 构建并保存 XML 文件
这是最直观的方式:先创建内存中的 XML 文档结构,再序列化为文件。
- 通过
DocumentBuilderFactory和DocumentBuilder创建空文档 - 用
Document.createElement()和appendChild()组装节点 - 用
TransformerFactory获取Transformer,设置输出格式(缩进、编码等) - 调用
transform()将DOMSource写入StreamResult(可指向文件)
示例代码:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
// 创建根元素
Element root = doc.createElement("book");
doc.appendChild(root);
// 添加子元素
Element title = doc.createElement("title");
title.setTextContent("Java 编程入门");
root.appendChild(title);
// 写入文件
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty(OutputKeys.INDENT, "yes");
t.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
t.transform(new DOMSource(doc), new StreamResult(new File("book.xml")));
使用第三方库(如 JDOM2 或 SimpleXML)简化操作
如果不想处理底层 DOM API,JDOM2 更轻量、API 友好;SimpleXML 则适合 POJO ↔ XML 映射。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
立即学习“Java免费学习笔记(深入)”;
- JDOM2:用
Element、Document直接构建,XMLOutputter一键写出文件 - SimpleXML:添加注解(如
@Root、@Element),用Serializer序列化对象到文件 - Maven 引入 JDOM2:
org.jdom:jdom2:2.0.6
注意编码与格式细节
中文乱码或格式丑陋常因忽略以下几点:
- 务必设置
OutputKeys.ENCODING为"UTF-8",且文件系统支持该编码 - 启用缩进需设
OutputKeys.INDENT为"yes",部分 JDK 版本还需加{http://xml.apache.org/xslt}indent-amount属性 - 若输出含 XML 声明(
<?xml version="1.0" encoding="UTF-8"?>),确保OutputKeys.OMIT_XML_DECLARATION为"no"(默认就是)
避免常见错误
新手容易卡在几个地方:
- 忘记调用
setTextContent()或setAttribute(),导致节点为空 - 用错父节点:
appendChild()必须在目标父节点上调用,不是Document直接调用 - 文件路径错误:传给
StreamResult的File要确保父目录存在,否则抛IOException - 未捕获
ParserConfigurationException、TransformerException等检查型异常

















