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();
    }
}
相关推荐
doubt。23 分钟前
【BUUCTF】[RCTF2015]EasySQL1
网络·数据库·笔记·mysql·安全·web安全
Maybe_ch1 小时前
群晖部署-Calibreweb
数据库·群晖·nas
小辛学西嘎嘎1 小时前
MVCC在MySQL中实现无锁的原理
数据库·mysql
CC呢1 小时前
基于STM32单片机火灾安全监测一氧化碳火灾
数据库·mongodb
笔耕不辍cj1 小时前
两两交换链表中的节点
数据结构·windows·链表
MasterNeverDown2 小时前
解决 PostgreSQL 中创建 TimescaleDB 扩展的字符串错误
数据库·postgresql·oracle
limts2 小时前
Oracle之开窗函数使用
数据库·oracle
Ase5gqe2 小时前
Windows 配置 Tomcat环境
java·windows·tomcat
拾荒的小海螺4 小时前
JAVA:Spring WebClient 的应用指南
java·数据库·spring
LuckyRich14 小时前
2024年博客之星主题创作|2024年度感想与新技术Redis学习
数据库·redis·缓存