在Java开发中,使用JDOM修改XML文件内容是一种高效且易操作的方式,JDOM提供了面向Java开发者的友好API,避免了传统DOM解析的繁琐操作,能够快速实现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