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();
    }
}
相关推荐
·薯条大王2 小时前
MySQL联合查询
数据库·mysql
niandb3 小时前
The Rust Programming Language 学习 (九)
windows·rust
morris1314 小时前
【redis】redis实现分布式锁
数据库·redis·缓存·分布式锁
hycccccch4 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
这个懒人5 小时前
深入解析Translog机制:Elasticsearch的数据守护者
数据库·elasticsearch·nosql·translog
Yan-英杰5 小时前
【百日精通JAVA | SQL篇 | 第二篇】数据库操作
服务器·数据库·sql
NineData6 小时前
NineData云原生智能数据管理平台新功能发布|2025年3月版
数据库
virelin_Y.lin6 小时前
系统与网络安全------Windows系统安全(1)
windows·安全·web安全·系统安全
百代繁华一朝都-绮罗生7 小时前
检查是否存在占用内存过大的SQL
数据库·sql
吾日三省吾码7 小时前
Python 脚本:自动化你的日常任务
数据库·python·自动化