如何用编程实现对XML文档的增删查改操作

来源:站长论坛作者:小师妹头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何用编程实现对XML文档的增删查改操作》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用编程实现对XML文档的增删查改操作》有用,将其分享出去将是对创作者最好的鼓励。

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

如何用编程实现对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

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