Java 中使用 DOM4J 解析与修改 XML 配置详解

陈默
陈默
发布时间:2026-10-15 | 6人浏览过
原创

本文详细讲解在 Java 开发中如何使用 DOM4J 库进行 XML 文件的解析、查询与修改。通过引入 DOM4J 依赖,利用 SAXReader 读取 XML 源文件构建 DOM 树,并通过单例模式实现系统配置的高效管理。文章包含获取节点内容、设置新键值对以及将变更写回配置文件的全流程代码示例。

DOM4J 核心概念与准备工作

DOM4j 是一个基于 Java 的开源 XML 解析库,以其高性能、内存效率和 API 的灵活性著称。在使用之前,需要确保项目中已导入 dom4j 相关的依赖包。

DOM4J 主要定义了以下核心类,理解它们是操作 XML 的基础:

  • Document:表示整个 XML 文档对象,通常被称为 DOM 树。
  • Element:表示 XML 中的一个元素(节点),用于操作其子元素、文本、属性和命名空间。
  • Attribute:表示元素的属性,可获取和设置属性值。
  • Node:代表元素、属性或处理指令等节点类型。

常见的操作方法包括:

  • SAXReader.read(xmlSource):构建 XML 源的 DOM4J 文档对象。
  • Document.getRootElement():获取 XML 的根元素。
  • Element.attributes():获取一个元素的所有属性集合。
  • Node.valueOf(@Name):获取指定名称属性的值。

第一步:加载 XML 文档

操作的起点是使用 SAXReader 将 XML 文件或输入流转换为内存中的 Document 对象,并获取根节点。在实际应用中,常结合单例模式确保配置只被加载一次,提高性能。

// 1. 创建 SAXReader 实例
SAXReader reader = new SAXReader();
// 2. 从文件路径或 URL 读取文档
try {
    Document document = reader.read(configPath);
    // 3. 获取根节点
    Element root = document.getRootElement();
} catch (DocumentException e) {
    e.printStackTrace();
}

下面是一个完整的单例模式工具类 SystemConfig,用于在应用启动时加载配置文件:

package com.lmc.util;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
public class SystemConfig {
    private volatile static SystemConfig config = null;
    private static URL configPath = SystemConfig.class.getClassLoader().getResource("SystemConfig.xml");
    private static Document document;
    private static Element root;
    private static final Logger LOGGER = Logger.getLogger(SystemConfig.class);

    /**
     * 单例模式实例获取
     */
    public static SystemConfig newInstance() {
        if (config == null) {
            synchronized (SystemConfig.class) {
                if (config == null) {
                    config = new SystemConfig();
                    SAXReader reader = new SAXReader();
                    try {
                        // 加载配置文件到内存
                        document = reader.read(configPath);
                        root = document.getRootElement();
                    } catch (DocumentException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return config;
    }
}

第二步:查询节点内容

在获取根节点 root 后,可以通过节点名称(Key)查找对应的子节点并获取其文本内容。DOM4J 提供了多种获取文本的方法,需注意空白字符的处理。

// 根据 key 获取子元素
Element node = root.element(key);

if (node != null) {
    // 获取文本,保留内部空格但去除首尾空格
    String textTrim = node.getTextTrim();
    // 获取原始文本,含所有空格
    String text = node.getText();
    // 获取字符串值
    String stringValue = node.getStringValue();
}

若 Key 不存在或值为空,建议在业务逻辑中进行判断并记录日志,以避免空指针异常:

public String getValueByKey(String key) {
    String resultvalue = null;
    if (root.element(key) == null) {
        LOGGER.error("The key is not exist!! key: " + key);
        return null;
    } else {
        resultvalue = root.element(key).getStringValue();
        if (resultvalue == null || resultvalue.isEmpty()) {
             LOGGER.error("get value by key FAIL!! key: " + key);
             return null;
        }
    }
    return resultvalue;
}

第三步:创建节点并保存配置

除了读取,DOM4J 还支持动态修改 XML 结构。可以在根节点下添加新的子元素,设置其文本,最后将修改后的 Document 对象写回文件。注意写入时需指定编码格式以防止中文乱码。

public void setValueByKey(String value, String key) {
    // 1. 在根节点下添加新元素
    Element element = root.addElement(key);
    element.setText(value);

    // 2. 配置输出格式为 UTF-8 Pretty Print
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("UTF-8");

    // 3. 写入文件
    try (FileOutputStream out = new FileOutputStream(configPath.getPath())) {
        XMLWriter writer = new XMLWriter(out, format);
        writer.write(document);
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

将上述读写方法整合进 SystemConfig 类后,即可实现一个健壮的 XML 配置管理器。例如在测试或初始化方法中可以验证输出:

public void str(String key) {
    Element element = root.element(key);
    if(element != null){
        System.out.println(element.getText());
        System.out.println(element.getStringValue());
        System.out.println(element.getTextTrim());
    }
}

总结

通过 DOM4J,Java 开发者可以方便地对 XML 文档进行 CRUD 操作。关键点在于使用 SAXReader 正确加载文档,利用 Element 对象导航树结构,并在修改后通过 XMLWriter 配合正确的编码格式保存结果。以上关于 Java 使用 DOM4J 解析和生成 XML 文件的详细内容,更多关于 Java 配置文件处理的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表