一、dom4j 是什么(快速理解)

dom4j = Java 里一个偏“工程实用”的 XML 处理库

核心特点:

  • 支持 DOM + SAX + XPath + JAXP
  • 基于 Java 集合(比原生 DOM 更好用)
  • API 更灵活,适合复杂 XML 操作 ([GitHub][1])

👉 简单对比:

  • 原生 DOM:啰嗦
  • SAX:流式但难写
  • dom4j:可读性 + 灵活性平衡

二、Maven 引入(最关键)

✅ 推荐使用最新版(当前主流)

<dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.2.0</version>
</dependency>

([Maven Central][2])


⚠️ 可选依赖(很多人踩坑点)

dom4j 不再自动引入一些依赖,比如 XPath 支持:

<dependency>
    <groupId>jaxen</groupId>
    <artifactId>jaxen</artifactId>
    <version>1.2.0</version>
</dependency>

👉 否则:

  • selectNodes() / XPath 可能报错

官方说明:部分依赖是 optional,需要手动引入 ([GitHub][1])


三、官方入门(核心 API)

1️⃣ 解析 XML(最基础)

import org.dom4j.Document;
import org.dom4j.io.SAXReader;

SAXReader reader = new SAXReader();
Document document = reader.read(new File("test.xml"));

👉 本质:

  • SAXReader → 解析器
  • Document → 整个 XML 树

([dom4j][3])


2️⃣ 获取节点

Element root = document.getRootElement();

3️⃣ 遍历子节点

List<Element> elements = root.elements("user");

for (Element e : elements) {
    System.out.println(e.elementText("name"));
}

4️⃣ XPath(核心能力)

List<Node> nodes = document.selectNodes("//user/name");

for (Node node : nodes) {
    System.out.println(node.getText());
}

👉 这个是 dom4j 最大优势之一(比 DOM 强很多)


5️⃣ 创建 XML

Document document = DocumentHelper.createDocument();
Element root = document.addElement("users");

Element user = root.addElement("user");
user.addElement("name").setText("echo");

6️⃣ 写出 XML

XMLWriter writer = new XMLWriter(new FileWriter("out.xml"));
writer.write(document);
writer.close();

四、核心对象模型(必须搞清楚)

这是 dom4j 的核心抽象:

Document
 └── Element
      ├── Attribute
      └── Text

重点理解:

类型 作用
Document 整个 XML
Element 标签
Attribute 属性
Node XPath 结果统一接口

五、常见使用模式(工程视角)

✔ 场景1:配置文件解析

  • 读取 XML → 转对象

✔ 场景2:日志/数据转换

  • XML → JSON / DTO

✔ 场景3:规则引擎(你这种架构会用到)

  • XPath 做规则匹配

👉 dom4j 在“规则/DSL类系统”里特别常见


六、优缺点(架构师视角)

👍 优点

  • XPath 强(比 JDK 自带好用)
  • API 简洁
  • 灵活性高

👎 缺点

  • 不是流式(大 XML 内存压力)
  • 社区活跃度一般
  • 不如 Jackson / JAXB 现代

七、和现代方案对比(关键)

方案 推荐度 说明
dom4j ⭐⭐⭐ 老牌稳定
JAXB ⭐⭐⭐⭐ Java 标准绑定
Jackson XML ⭐⭐⭐⭐⭐ 现代主流

👉 如果你是做平台 / AI / DSL:

  • dom4j 仍然很适合做解析层

八、一句话总结

dom4j = “工程友好的 XML 操作库 + 强 XPath 支持”

参考资料