DOM4J是Java中高效处理XML的利器,支持解析、生成、修改和序列化;通过SAXReader读取XML构建Document树,用DocumentHelper创建文档、Element链式构建节点,再通过XMLWriter配合OutputFormat实现格式化或紧凑型XML输出。

DOM4J 是 Java 中处理 XML 最常用、最高效的库之一,它把解析、生成、修改和序列化封装得非常自然。所谓“XML 序列化”,就是把内存中的 Document 对象写成标准格式的 XML 字符串或文件;而“解析”则是把 XML 字符串或文件读进内存,构建成可操作的 Document 树。
一、准备依赖与基础配置
确保项目中已引入 dom4j 核心包(推荐 2.1.3 或以上版本)。Maven 项目直接添加:
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
若为传统 JavaSE 项目,需手动将 dom4j-2.1.3.jar 放入 lib/ 目录,并加入 Build Path。注意:新版 dom4j 已内置 XPath 和 SAX 支持,无需额外添加 jaxen(旧版才需要)。
立即学习“Java免费学习笔记(深入)”;
二、解析 XML 文件为 Document 对象
使用 SAXReader 读取 XML 源(支持 File、InputStream、URL 等),自动构建内存树结构:
- 创建
SAXReader实例(线程不安全,建议每次新建) - 调用
read()方法加载 XML 源,返回Document - 通过
getRootElement()获取根元素,再逐层遍历子节点
示例代码片段:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("config.xml"));
Element root = doc.getRootElement();
for (Element good : root.elements("good")) {
String name = good.elementText("name"); // 直接获取子元素文本
String price = good.elementText("price");
String place = good.elementText("place");
System.out.printf("%s — ¥%s(%s)\n", name, price, place);
}
三、生成并序列化 XML 文档
从零构建 Document 并输出为格式化 XML 文件,关键在于三步:
- 用
DocumentHelper.createDocument()创建空文档 - 调用
addAttribute()、setText()、addElement()构建节点树(链式调用很顺手) - 用
XMLWriter+OutputFormat控制输出样式(换行缩进 or 压缩)
例如生成带属性和文本的地址列表:
Document doc = DocumentHelper.createDocument();
Element root = doc.addElement("addressList");
Element linkMan = root.addElement("linkMan");
linkMan.addElement("name").addAttribute("id", "001").setText("张三");
linkMan.addElement("email").setText("zhangsan@example.com");
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileOutputStream("address.xml"), format);
writer.write(doc);
writer.close();
四、常见序列化控制要点
实际应用中要注意几个细节,避免乱码或格式异常:
- 输出时指定编码:在
OutputFormat中设置format.setEncoding("UTF-8") - 避免中文乱码:确保 XML 声明中
encoding="UTF-8"与实际写入编码一致 - 压缩输出:用
OutputFormat.createCompactFormat()可生成无空格、无换行的紧凑 XML - 写入字符串而非文件:用
new XMLWriter(new StringWriter(), format)获取 XML 字符串
不复杂但容易忽略。

















