在Java开发中,DOM4J是常用的XML处理工具,很多场景下需要生成XML内容并写入文件,同时要求输出的XML有良好的缩进和换行格式,方便后续查看和维护。下面介绍完整的实现步骤和相关注意事项。

准备工作
首先需要在项目中引入DOM4J的依赖,如果是Maven项目,在pom.xml中添加如下依赖:
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.4</version>
</dependency>
如果是普通Java项目,可以下载DOM4J的jar包并导入到项目的类路径中。
创建XML文档内容
使用DOM4J的DocumentHelper类可以创建XML文档对象,然后逐步添加根节点、子节点和属性等内容。示例代码如下:
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class Dom4jXmlWriter {
public static Document createXmlDocument() {
// 创建文档对象
Document document = DocumentHelper.createDocument();
// 创建根节点
Element rootElement = document.addElement("users");
// 添加第一个用户节点
Element user1 = rootElement.addElement("user");
user1.addAttribute("id", "1");
user1.addElement("name").setText("张三");
user1.addElement("age").setText("25");
user1.addElement("email").setText("test@ipipp.com");
// 添加第二个用户节点
Element user2 = rootElement.addElement("user");
user2.addAttribute("id", "2");
user2.addElement("name").setText("李四");
user2.addElement("age").setText("30");
user2.addElement("email").setText("demo@ipipp.com");
return document;
}
}
配置XML格式化规则
DOM4J提供了OutputFormat类来设置XML的输出格式,我们可以自定义缩进、换行、编码等规则。常见的配置项如下:
- setEncoding:设置XML的编码格式,比如UTF-8
- setIndent:设置缩进的字符串,比如两个空格或者一个制表符
- setNewlines:设置是否启用换行,参数为true表示启用
- setTrimText:设置是否去除文本内容的首尾空格,参数为true表示去除
示例格式化配置代码:
import org.dom4j.io.OutputFormat;
public class Dom4jXmlWriter {
public static OutputFormat createOutputFormat() {
// 创建格式化对象,使用紧凑格式作为基础
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置编码为UTF-8
format.setEncoding("UTF-8");
// 设置缩进为4个空格
format.setIndent(" ");
// 启用换行
format.setNewlines(true);
// 去除文本首尾空格
format.setTrimText(true);
return format;
}
}
将XML写入文件
配置好格式后,使用XMLWriter类将文档内容写入到指定的文件路径中。需要注意处理IO异常,并且确保流正确关闭。完整示例代码如下:
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.FileOutputStream;
import java.io.IOException;
public class Dom4jXmlWriter {
public static void writeXmlToFile(Document document, String filePath) {
// 创建格式化对象
OutputFormat format = createOutputFormat();
// 声明XMLWriter变量
XMLWriter writer = null;
try {
// 创建文件输出流
FileOutputStream fos = new FileOutputStream(filePath);
// 初始化XMLWriter,关联输出流和格式化规则
writer = new XMLWriter(fos, format);
// 写入文档内容
writer.write(document);
// 刷新缓冲区
writer.flush();
System.out.println("XML文件写入成功,路径:" + filePath);
} catch (IOException e) {
e.printStackTrace();
System.out.println("XML文件写入失败:" + e.getMessage());
} finally {
// 关闭流
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
// 创建XML文档
Document xmlDocument = createXmlDocument();
// 指定输出文件路径
String outputPath = "D:/output_users.xml";
// 写入文件
writeXmlToFile(xmlDocument, outputPath);
}
}
常见问题说明
中文乱码问题
如果出现中文乱码,首先检查OutputFormat的编码是否设置为UTF-8,同时写入文件时使用的输出流要和编码匹配,上述示例中已经统一使用UTF-8编码,可避免大部分乱码问题。
格式化不生效问题
如果设置的缩进和换行没有生效,需要确认是否使用了createPrettyPrint()方法初始化OutputFormat,或者手动开启了换行和缩进配置,不要使用紧凑格式的输出配置。
节点内容特殊字符处理
如果节点文本内容包含<、>、&等特殊字符,DOM4J会自动进行转义处理,不需要开发者手动处理,避免生成的XML格式错误。