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();
    }
}
相关推荐
云和数据.ChenGuang4 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys5 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi5 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据6 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi7 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀7 小时前
Redis梳理
数据库·redis·缓存
独行soc7 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天7 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺8 小时前
分布式系统架构:服务容错
数据库·架构
GoodStudyAndDayDayUp9 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea