XML文档的增删查改是数据交互场景下的常见需求,不同编程语言都有对应的解析库支持这类操作,下面以Java的dom4j库和Python的内置xml模块为例,讲解完整的实现流程。

一、Java环境下使用dom4j实现XML增删查改
1. 准备工作
首先需要在项目中引入dom4j依赖,如果是Maven项目,在pom.xml中添加如下依赖:
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.4</version>
</dependency>
2. 查询XML节点
假设有如下待操作的XML文件student.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="1">
<name>张三</name>
<age>20</age>
<score>90</score>
</student>
<student id="2">
<name>李四</name>
<age>21</age>
<score>88</score>
</student>
</students>
查询所有学生姓名的代码实现如下:
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class XmlOperate {
public static void queryXml() throws DocumentException {
// 创建SAX解析器
SAXReader reader = new SAXReader();
// 读取XML文件获取文档对象
Document document = reader.read(new File("student.xml"));
// 获取根节点
Element rootElement = document.getRootElement();
// 获取所有student子节点
List<Element> studentElements = rootElement.elements("student");
for (Element student : studentElements) {
// 获取name子节点的文本内容
Element nameElement = student.element("name");
System.out.println("学生姓名:" + nameElement.getText());
}
}
public static void main(String[] args) throws DocumentException {
queryXml();
}
}
3. 新增XML节点
新增一个id为3的学生节点的代码实现如下:
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.File;
import java.io.FileOutputStream;
public class XmlOperate {
public static void addXml() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("student.xml"));
Element rootElement = document.getRootElement();
// 创建新的student节点
Element newStudent = rootElement.addElement("student");
// 设置id属性
newStudent.addAttribute("id", "3");
// 添加子节点
newStudent.addElement("name").setText("王五");
newStudent.addElement("age").setText("22");
newStudent.addElement("score").setText("95");
// 设置输出格式,避免中文乱码
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
// 写入文件
XMLWriter writer = new XMLWriter(new FileOutputStream("student.xml"), format);
writer.write(document);
writer.close();
}
public static void main(String[] args) throws Exception {
addXml();
}
}
4. 修改XML节点
修改id为2的学生年龄为23的代码实现如下:
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.File;
import java.io.FileOutputStream;
import java.util.List;
public class XmlOperate {
public static void updateXml() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("student.xml"));
Element rootElement = document.getRootElement();
List<Element> studentElements = rootElement.elements("student");
for (Element student : studentElements) {
// 获取id属性值
String id = student.attributeValue("id");
if ("2".equals(id)) {
// 找到对应节点,修改age子节点内容
Element ageElement = student.element("age");
ageElement.setText("23");
break;
}
}
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("student.xml"), format);
writer.write(document);
writer.close();
}
public static void main(String[] args) throws Exception {
updateXml();
}
}
5. 删除XML节点
删除id为1的学生节点的代码实现如下:
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.File;
import java.io.FileOutputStream;
import java.util.List;
public class XmlOperate {
public static void deleteXml() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("student.xml"));
Element rootElement = document.getRootElement();
List<Element> studentElements = rootElement.elements("student");
for (Element student : studentElements) {
String id = student.attributeValue("id");
if ("1".equals(id)) {
// 删除该节点
rootElement.remove(student);
break;
}
}
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("student.xml"), format);
writer.write(document);
writer.close();
}
public static void main(String[] args) throws Exception {
deleteXml();
}
}
二、Python环境下使用内置xml模块实现XML增删查改
1. 查询XML节点
同样基于前面的student.xml文件,查询所有学生姓名的Python代码实现如下:
import xml.etree.ElementTree as ET
def query_xml():
# 解析XML文件
tree = ET.parse("student.xml")
# 获取根节点
root = tree.getroot()
# 遍历所有student子节点
for student in root.findall("student"):
# 获取name子节点的文本
name = student.find("name").text
print(f"学生姓名:{name}")
if __name__ == "__main__":
query_xml()
2. 新增XML节点
新增id为3的学生节点的Python代码实现如下:
import xml.etree.ElementTree as ET
def add_xml():
tree = ET.parse("student.xml")
root = tree.getroot()
# 创建新的student节点
new_student = ET.SubElement(root, "student")
# 设置id属性
new_student.set("id", "3")
# 添加子节点
name_node = ET.SubElement(new_student, "name")
name_node.text = "王五"
age_node = ET.SubElement(new_student, "age")
age_node.text = "22"
score_node = ET.SubElement(new_student, "score")
score_node.text = "95"
# 写入文件
tree.write("student.xml", encoding="UTF-8", xml_declaration=True)
if __name__ == "__main__":
add_xml()
3. 修改XML节点
修改id为2的学生年龄为23的Python代码实现如下:
import xml.etree.ElementTree as ET
def update_xml():
tree = ET.parse("student.xml")
root = tree.getroot()
for student in root.findall("student"):
student_id = student.get("id")
if student_id == "2":
age_node = student.find("age")
age_node.text = "23"
break
tree.write("student.xml", encoding="UTF-8", xml_declaration=True)
if __name__ == "__main__":
update_xml()
4. 删除XML节点
删除id为1的学生节点的Python代码实现如下:
import xml.etree.ElementTree as ET
def delete_xml():
tree = ET.parse("student.xml")
root = tree.getroot()
for student in root.findall("student"):
student_id = student.get("id")
if student_id == "1":
root.remove(student)
break
tree.write("student.xml", encoding="UTF-8", xml_declaration=True)
if __name__ == "__main__":
delete_xml()
三、操作注意事项
- 操作XML文件前建议先备份原文件,避免误操作导致数据丢失
- 写入文件时需要指定正确的编码格式,防止中文内容出现乱码
- 不同解析库对XML格式的校验规则不同,需要确保待操作的XML文档格式合法
- 如果需要处理大体积XML文件,建议使用流式解析方式,避免占用过多内存
XML增删查改dom4jPython_xmlJava_xml修改时间:2026-06-28 11:30:29