导读:本期聚焦于小伙伴创作的《如何使用Dom4j修改XML文档并引入相关依赖》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何使用Dom4j修改XML文档并引入相关依赖》有用,将其分享出去将是对创作者最好的鼓励。

在Java项目开发中,XML文档常被用来存储配置信息或数据交换内容,Dom4j作为一款灵活的XML解析框架,提供了便捷的API来操作XML文档,其中修改XML文档是开发中非常常见的需求,要完成这个操作首先需要正确引入Dom4j的相关依赖。

如何使用Dom4j修改XML文档并引入相关依赖

一、引入Dom4j依赖

1. Maven项目引入方式

如果项目是基于Maven构建的,只需要在项目的pom.xml文件中添加Dom4j的依赖坐标即可,目前常用的稳定版本是2.1.3,添加后Maven会自动下载对应的jar包到本地仓库。

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

2. 普通Java项目引入方式

如果是没有使用构建工具的普通Java项目,需要先从官方渠道下载Dom4j的jar包,然后将jar包添加到项目的类路径中。如果是IDEA开发工具,可以右键点击项目中的jar包,选择Add to Build Path完成依赖引入。

二、使用Dom4j修改XML文档的完整流程

修改XML文档的核心步骤包括读取原XML文档、获取需要操作的节点、执行修改操作、将修改后的内容写回文件,下面通过一个具体的示例来演示整个过程。

1. 待修改的XML示例文档

假设我们有一个名为user.xml的文档,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user id="1">
        <name>张三</name>
        <age>20</age>
        <email>zhangsan@ipipp.com</email>
    </user>
    <user id="2">
        <name>李四</name>
        <age>22</age>
        <email>lisi@ipipp.com</email>
    </user>
</users>

2. 读取XML文档

首先需要使用Dom4j的SAXReader类读取XML文档,得到Document对象,后续的所有修改操作都基于这个对象进行。

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import java.io.File;

public class Dom4jModifyDemo {
    public static void main(String[] args) {
        // 创建SAXReader实例
        SAXReader reader = new SAXReader();
        try {
            // 读取XML文档,得到Document对象
            Document document = reader.read(new File("user.xml"));
            // 后续修改操作会在这里补充
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

3. 修改已有节点内容

比如我们需要将id为1的用户年龄修改为25,可以通过XPath表达式定位到对应的节点,然后修改其文本内容。

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.File;

public class Dom4jModifyDemo {
    public static void main(String[] args) {
        SAXReader reader = new SAXReader();
        try {
            Document document = reader.read(new File("user.xml"));
            // 使用XPath定位id为1的用户的age节点
            Node ageNode = document.selectSingleNode("/users/user[@id='1']/age");
            if (ageNode != null) {
                // 修改节点文本内容
                ageNode.setText("25");
                System.out.println("修改年龄成功");
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

4. 添加新节点

我们可以在id为2的用户节点下添加一个新的phone子节点,存储用户的电话号码。

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.File;

public class Dom4jModifyDemo {
    public static void main(String[] args) {
        SAXReader reader = new SAXReader();
        try {
            Document document = reader.read(new File("user.xml"));
            // 定位id为2的user节点
            Node userNode = document.selectSingleNode("/users/user[@id='2']");
            if (userNode != null) {
                Element userElement = (Element) userNode;
                // 添加phone子节点
                Element phoneElement = userElement.addElement("phone");
                phoneElement.setText("13800138000");
                System.out.println("添加手机号节点成功");
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

5. 删除指定节点

如果需要删除id为1的用户下的email节点,可以先定位到该节点,然后通过其父节点执行删除操作。

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.File;

public class Dom4jModifyDemo {
    public static void main(String[] args) {
        SAXReader reader = new SAXReader();
        try {
            Document document = reader.read(new File("user.xml"));
            // 定位id为1的用户的email节点
            Node emailNode = document.selectSingleNode("/users/user[@id='1']/email");
            if (emailNode != null) {
                Element emailElement = (Element) emailNode;
                // 获取父节点,执行删除操作
                Element parentElement = emailElement.getParent();
                parentElement.remove(emailElement);
                System.out.println("删除邮箱节点成功");
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

6. 保存修改后的文档

所有的修改操作都是在内存中的Document对象上进行的,最后需要使用XMLWriter将修改后的内容写回原文件或者新文件。

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileOutputStream;

public class Dom4jModifyDemo {
    public static void main(String[] args) {
        SAXReader reader = new SAXReader();
        try {
            Document document = reader.read(new File("user.xml"));
            // 修改id为1的用户年龄
            Node ageNode = document.selectSingleNode("/users/user[@id='1']/age");
            if (ageNode != null) {
                ageNode.setText("25");
            }
            // 给id为2的用户添加手机号节点
            Node userNode = document.selectSingleNode("/users/user[@id='2']");
            if (userNode != null) {
                Element userElement = (Element) userNode;
                Element phoneElement = userElement.addElement("phone");
                phoneElement.setText("13800138000");
            }
            // 删除id为1的用户的邮箱节点
            Node emailNode = document.selectSingleNode("/users/user[@id='1']/email");
            if (emailNode != null) {
                Element emailElement = (Element) emailNode;
                Element parentElement = emailElement.getParent();
                parentElement.remove(emailElement);
            }
            // 设置输出格式,避免中文乱码,同时格式化输出
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("UTF-8");
            // 将修改后的内容写回原文件
            XMLWriter writer = new XMLWriter(new FileOutputStream("user.xml"), format);
            writer.write(document);
            writer.close();
            System.out.println("XML文档修改并保存成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三、注意事项

  • 使用XPath定位节点时,需要确保Dom4j的依赖中包含了XPath的支持,高版本Dom4j已经内置了相关功能,低版本可能需要额外引入jaxen依赖。
  • 写回文件时建议指定编码格式,和原XML文档的编码保持一致,避免出现中文乱码问题。
  • 修改节点属性时,可以使用element.attribute("属性名").setValue("新属性值")的方式完成操作。
  • 操作文件时需要注意文件路径的正确性,相对路径是相对于项目的工作目录,也可以使用绝对路径避免路径错误。

通过以上的步骤,就可以完整实现使用Dom4j修改XML文档的所有操作,开发者可以根据实际的需求调整对应的节点操作逻辑,快速完成XML文档的修改工作。

Dom4jXML修改Java依赖XML解析SAXReader修改时间:2026-06-03 14:35:04

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。