XML的使用

一.xml

1.xml是什么:指可扩展标记语言,被设计用来传输和存储数据,可以解决程序间数据传输的问题,也可以做配置文件,还可以充当小型的数据库

2.xml的标签可以自定义,但其命名方式需要注意以下几点 区分大小写;不能以数字开头;不能包含空格;名称中间不能包含冒号;如果标签之间需要间隔建议使用下划线

3.属性 属性值用双引号或者单引号进行分隔,一个元素可以有多个属性,特定的属性名称在同一个元素标记中只能出现一次,属性值不能包括&字符

4.CDATA节:有些内容不想让解析引擎执行,而是当做原始内容处理(即当做普通文本),可以用CADTA包括起来,CDATA节中的所有字符都会被当做简单文本,而不是xml标记 (除]]>其他都可以放) <![CDATA[文本内容]]]>

5.转义字符:&表示& <表示< >表示>

二.DOM4j

1.DOM4J用于对xml文件进行解析处理,可以对文件进行增删改查

2.下面是使用DOM4j的一些例子

bash 复制代码
import org.dom4j.Document;
        import org.dom4j.DocumentException;
        import org.dom4j.DocumentHelper;
        import org.dom4j.Element;
        import org.dom4j.io.OutputFormat;
        import org.dom4j.io.SAXReader;
        import org.dom4j.io.XMLWriter;
        import org.junit.jupiter.api.Test;

        import java.io.*;
        import java.util.List;

public class Dom4j_ {

    //    演示如何加载xml文件
    @Test
    public void loadXML() throws DocumentException {
        //得到一个解析器
        SAXReader reader = new SAXReader();
        //看document的对象属性
        Document document = reader.read(new File("src/main/java/students.xml"));
        System.out.println(document);
    }

    @Test
    //遍历所有的students信息
    public void ListStus() throws DocumentException {
        //1得到解析器
        SAXReader reader = new SAXReader();
        //2用解析器解析文件
        Document document = reader.read(new File("src//main//java//students.xml"));
        //3得到一个dom对象,得到根节点
        Element rootElement = document.getRootElement();
        //4得到根节点的students
        List<Element> students = rootElement.elements();
        System.out.println(students);
        for (Element student : students) {
            //获取student的下面的子元素
            Element name = student.element("name");
            Element age = student.element("age");
            Element gender = student.element("gender");
            System.out.println("名字是:" + name.getText() + "/t" + "性别是:" + age.getText() + "/t" + "年龄是:" + age.getText());
        }
    }

    //    指定读取第一个学生的信息
    @Test
    public void readOne() throws DocumentException {
        //得到一个解析器
        SAXReader reader = new SAXReader();
        //看document的对象属性
        Document document = reader.read(new File("src/main/java/students.xml"));
        Element rootElement = document.getRootElement();
        //拿到根节点下的学生的信息
        List<Element> students = rootElement.elements("student");
        Element student = (Element) students.get(0);
        //输出学生的信息
        Element name = student.element("name");
        Element age = student.element("age");
        Element gender = student.element("gender");
        System.out.println(name.getText() + "\t" + age.getText() + "\t\t" + gender.getText());
        System.out.println(student.attributeValue("id"));

    }

    //添加一个学生的信息


    @Test
    public void Student1() throws DocumentException {
        ///得到一个解析器
        SAXReader Reader = new SAXReader();
        //返回一个dom对象
        Document document = Reader.read(new File("src/main/java/students.xml"));
        //拿到根元素
        Element rootElement = document.getRootElement();
        //得到学生信息
        List<Element> elements = rootElement.elements();
        for (Element student : elements) {
            //得到student下的元素
            Element name = student.element("name");
            System.out.println(name.getText());
        }
    }


    //添加节点
    @Test
    public void addStudent() throws DocumentException, IOException {
        //得到解析器
        SAXReader saxReader = new SAXReader();
        //得到一个由文件解析成的dom对象,读取文件
        Document read = saxReader.read(new File("src/main/java/students.xml"));
        //得到dom对象的根元素
        Element rootElement = read.getRootElement();
        //创建一个学生对象
        Element newStu = DocumentHelper.createElement("student");
        //给元素添加属性
        newStu.addAttribute("id", "04");
        //给学生对象赋予子元素
        Element newStu_name = DocumentHelper.createElement("name");
        Element newStu_age = DocumentHelper.createElement("age");
        Element newStu_gender = DocumentHelper.createElement("gender");
        Element newStu_resume = DocumentHelper.createElement("resume");
        newStu_name.setText("宋江");
        newStu_age.setText("23");
        newStu_gender.setText("男");
        newStu_resume.setText("大好人");
        //把子元素挂载到newStu上
        newStu.add(newStu_name);
        newStu.add(newStu_age);
        newStu.add((newStu_gender));
        newStu.add(newStu_resume);
        //再把newStu加入到根节点
        rootElement.add(newStu);
        //直接输出会有中文乱码
        OutputFormat output = OutputFormat.createPrettyPrint();
        output.setEncoding("utf-8");
        //将xml文件更新
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/main/java/students.xml"));
        xmlWriter.write(read);
        xmlWriter.close();
    }
    //删除节点
    @Test
    public void delete() throws DocumentException, IOException {
        //得到解析器
        SAXReader saxReader = new SAXReader();
        //得到一个由文件解析成的dom对象,读取文件
        Document read = saxReader.read(new File("src/main/java/students.xml"));
        //得到dom对象的根元素
        Element rootElement = read.getRootElement();
        //找到根元素下的第一个学生
        Element student = (Element)rootElement.elements("student").get(0);
        //找到该元素的父元素,然后用父元素删除子元素
        student.getParent().remove(student);
        //更新xml内容
        //直接输出会有中文乱码
        OutputFormat output = OutputFormat.createPrettyPrint();
        output.setEncoding("utf-8");
        //将xml文件更新
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/main/java/students.xml"));
        xmlWriter.write(read);
        xmlWriter.close();
    }
}
相关推荐
集成显卡4 小时前
windows 下使用 bat 批处理运行 Chrome 无头模式刷一波访问量
windows·程序员
薛定谔的算法5 小时前
phoneGPT:构建专业领域的检索增强型智能问答系统
前端·数据库·后端
Databend6 小时前
Databend 亮相 RustChinaConf 2025,分享基于 Rust 构建商业化数仓平台的探索
数据库
得物技术7 小时前
破解gh-ost变更导致MySQL表膨胀之谜|得物技术
数据库·后端·mysql
Raymond运维12 小时前
MariaDB源码编译安装(二)
运维·数据库·mariadb
沢田纲吉12 小时前
🗄️ MySQL 表操作全面指南
数据库·后端·mysql
RestCloud1 天前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud1 天前
为什么说零代码 ETL 是未来趋势?
数据库·api
ClouGence1 天前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库
DemonAvenger2 天前
NoSQL与MySQL混合架构设计:从入门到实战的最佳实践
数据库·mysql·性能优化