如何使用JDOM修改XML文件内容

来源:开发教程作者:樱由罗头衔:网络博主
导读:本期聚焦于小伙伴创作的《如何使用JDOM修改XML文件内容》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何使用JDOM修改XML文件内容》有用,将其分享出去将是对创作者最好的鼓励。

在Java开发中,使用JDOM修改XML文件内容是一种高效且易操作的方式,JDOM提供了面向Java开发者的友好API,避免了传统DOM解析的繁琐操作,能够快速实现XML节点的增删改查。

如何使用JDOM修改XML文件内容

环境准备

在使用JDOM之前,需要先引入JDOM的依赖,如果是Maven项目,可以在pom.xml中添加如下依赖:

<dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom2</artifactId>
    <version>2.0.6</version>
</dependency>

如果是普通Java项目,可以下载JDOM的jar包,导入到项目的类路径中即可。

JDOM修改XML的核心步骤

使用JDOM修改XML文件内容通常遵循以下几个步骤:

  • 创建SAXBuilder对象,用于读取XML文件
  • 解析XML文件得到Document对象
  • 通过Document对象获取根节点,再定位到需要修改的目标节点
  • 对目标节点进行修改、新增或删除操作
  • 创建XMLOutputter对象,将修改后的Document写回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>

1. 修改节点文本内容

下面的代码实现将id为1的用户的年龄修改为25:

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

public class JDOMModifyDemo {
    public static void main(String[] args) {
        try {
            // 创建SAXBuilder对象
            SAXBuilder saxBuilder = new SAXBuilder();
            // 读取XML文件得到Document对象
            Document document = saxBuilder.build(new File("user.xml"));
            // 获取根节点
            Element rootElement = document.getRootElement();
            // 获取所有user子节点
            List<Element> userList = rootElement.getChildren("user");
            // 遍历找到id为1的user节点
            for (Element user : userList) {
                String id = user.getAttributeValue("id");
                if ("1".equals(id)) {
                    // 获取age子节点
                    Element ageElement = user.getChild("age");
                    // 修改age节点的文本内容
                    ageElement.setText("25");
                    break;
                }
            }
            // 创建XMLOutputter对象,设置输出格式
            XMLOutputter outputter = new XMLOutputter();
            outputter.setFormat(Format.getPrettyFormat());
            // 将修改后的Document写回文件
            outputter.output(document, new FileOutputStream(new File("user.xml")));
            System.out.println("修改节点文本成功");
        } catch (JDOMException | IOException e) {
            e.printStackTrace();
        }
    }
}

2. 修改节点属性值

下面的代码实现将id为2的用户的id属性修改为3:

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

public class JDOMModifyAttrDemo {
    public static void main(String[] args) {
        try {
            SAXBuilder saxBuilder = new SAXBuilder();
            Document document = saxBuilder.build(new File("user.xml"));
            Element rootElement = document.getRootElement();
            List<Element> userList = rootElement.getChildren("user");
            for (Element user : userList) {
                String id = user.getAttributeValue("id");
                if ("2".equals(id)) {
                    // 修改id属性的值
                    user.setAttribute("id", "3");
                    break;
                }
            }
            XMLOutputter outputter = new XMLOutputter();
            outputter.setFormat(Format.getPrettyFormat());
            outputter.output(document, new FileOutputStream(new File("user.xml")));
            System.out.println("修改节点属性成功");
        } catch (JDOMException | IOException e) {
            e.printStackTrace();
        }
    }
}

3. 新增节点

下面的代码实现新增一个user节点到users根节点下:

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class JDOMAddNodeDemo {
    public static void main(String[] args) {
        try {
            SAXBuilder saxBuilder = new SAXBuilder();
            Document document = saxBuilder.build(new File("user.xml"));
            Element rootElement = document.getRootElement();
            // 创建新的user节点
            Element newUser = new Element("user");
            newUser.setAttribute("id", "4");
            // 创建子节点
            Element name = new Element("name");
            name.setText("王五");
            Element age = new Element("age");
            age.setText("28");
            Element email = new Element("email");
            email.setText("wangwu@ipipp.com");
            // 将子节点添加到user节点
            newUser.addContent(name);
            newUser.addContent(age);
            newUser.addContent(email);
            // 将新user节点添加到根节点
            rootElement.addContent(newUser);
            XMLOutputter outputter = new XMLOutputter();
            outputter.setFormat(Format.getPrettyFormat());
            outputter.output(document, new FileOutputStream(new File("user.xml")));
            System.out.println("新增节点成功");
        } catch (JDOMException | IOException e) {
            e.printStackTrace();
        }
    }
}

4. 删除节点

下面的代码实现删除id为4的user节点:

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

public class JDOMDeleteNodeDemo {
    public static void main(String[] args) {
        try {
            SAXBuilder saxBuilder = new SAXBuilder();
            Document document = saxBuilder.build(new File("user.xml"));
            Element rootElement = document.getRootElement();
            List<Element> userList = rootElement.getChildren("user");
            // 遍历找到要删除的节点
            for (int i = 0; i < userList.size(); i++) {
                Element user = userList.get(i);
                String id = user.getAttributeValue("id");
                if ("4".equals(id)) {
                    // 从根节点移除该user节点
                    rootElement.removeContent(user);
                    break;
                }
            }
            XMLOutputter outputter = new XMLOutputter();
            outputter.setFormat(Format.getPrettyFormat());
            outputter.output(document, new FileOutputStream(new File("user.xml")));
            System.out.println("删除节点成功");
        } catch (JDOMException | IOException e) {
            e.printStackTrace();
        }
    }
}

注意事项

在使用JDOM修改XML文件时,需要注意以下几点:

  • 修改完成后一定要调用XMLOutputter的output方法将Document写回文件,否则修改不会生效
  • 如果XML文件有编码要求,需要在Format中设置对应的编码格式,避免中文乱码
  • 操作节点属性时,使用getAttributeValue获取属性值,使用setAttribute修改属性值
  • 新增节点时,需要先创建节点对象,再添加子节点,最后将新节点添加到父节点中

通过上述示例,我们可以掌握使用JDOM修改XML文件内容的常见操作,根据实际需求选择对应的方法即可完成XML内容的更新。

JDOMXMLJavaXML_modify修改时间:2026-07-10 04:51:32

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