• 【JavaWeb】XML


    XML

    1.XML简介

    1.1.概念:可扩展的标记性语言.
    1.2.作用:
    (1).用来保存数据,而且这些数据具有自我描述性.
    (2).作为项目或者模块的配置文件.
    (3).作为网络传输数据的格式(现在JSON为主).

    2.XML语法

    2.1.文档声明(创建一个xml文件,用来描述图书信息)

    
    
    <boks>
        <book sn="SN4355553113">
            <name>时间简史name>
            <author>霍金author>
            <price>75price>
        book>
        <book>
            <name>javaname>
            <author>刘老师author>
            <price>9.8price>
        book>
    boks>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.2.XML元素(标签)
    (1).xml元素:从开始标签(包括)到结束标签(包括)的部分
    元素可以拥有属性
    元素可以包括其他元素,文本内容,或者两者的混合物
    元素可以简单的理解为是标签
    文本内容不是元素.
    (2).xml元素命名规则:

    • 名称可以包含字母,数字,其他字符
    • 名称不能以数字或标点符号开始
    • 名称不能包含空格
    (3).xml中的元素(标签)也分成单标签和双标签

    单标签
    格式: <标签名 属性=“值” 属性=“值”…/>
    双标签
    格式:<标签名 属性=“值” 属性=“值”>文本数据和子标签
    2.3.XML属性
    属性必须使用引号引起来.
    2.4.XML注释
    和html注释一样.
    2.5.文本区域(CDATA区)
    CDATA语法可以告诉xml解析器,CDATA里的文本内容,只是纯文本,不需要xml语法解析.

    CDATA格式:

    语法规则:
    (1).所有XML元素都必须有关闭标签.
    (2).XML标签对大小写敏感.
    (3).XML标签必须正确的嵌套.
    (4).XML文档必须有根元素.
    (5).XML的属性值须加引号.
    (6).XML中的特殊字符:> <

    3.XML解析技术介绍

    💙不管是html文件还是xml文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析.

    💙早期JDK为我们提供了两种xml解析技术DomSax(已经过时,但我们需要了解)

    DOM解析技术是w3c组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现.

    SAX解析技术以类似事件机制通过回调告诉用户当前正在解析的内容,它是一行一行的读取xml文件进行解析的,不会创建大量的dom对象,所以在解析xml的时候,在内存使用上,和性能上,都优于dom解析.

    第三方的解析:jdom在dom基础上进行了封装,dom4j又对jdom进行了封装,pull主要用在Android手机开发,跟sax非常类似,都是事件机制解析xml文件.
    注意:dom4j它是第三方的解析技术,我们需要使用第三方给我们提供好的类库才可以解析xml文件.

    4.dom4j解析技术⭐️

    💙由于dom4j不是sun公司的技术,属于第三方公司的技术,我们需要使用dom4j就需要到dom4j官网下载dom4j的jar包.
    dom4j编程步骤:
    (1).先加载xml文件创建Document对象.
    (2).通过Document对象得到根元素对象.
    (3).通过根元素.elements(标签名),返回一个集合,这个集合里放着,所有你指定的标签名的元素的对象.
    (4).找到想删除,修改的子元素,进行相应的操作.
    (5).保存到硬盘上.
    具体实现,详见以下代码

    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import org.junit.Test;
    import java.util.List;
    
    public class Dom4jTest {
        @Test
        public void test1() throws Exception {
            //创建一个saxreader输入流,去读取xml配置文件,生成document对象
            SAXReader saxreader = new SAXReader();
            Document document = saxreader.read("src/books.xml");
        }
        /**
         * 读取books.xml文件生成Book类
         */
        @Test
        public void test2() throws DocumentException {
            //1.读取books.xml文件
            SAXReader reader = new SAXReader();
            Document document = reader.read("src/books.xml");
            //2.通过Document对象获取根元素
            Element rootElement = document.getRootElement();
            //3.通过根元素获取book标签对象
            //element()和elements()都是通过标签名查找子元素
            List<Element> books = rootElement.elements("book");
            //4.遍历,处理每个book标签转换Book类
            for(Element book : books){
                //asXML()把标签对象,转换为标签字符串
                Element nameElement = book.element("name");
                //getText() 可以获取标签中的文本内容
                String nametext = nameElement.getText();
                String priceText = book.elementText("price");
                String authorText = book.elementText("author");
                String snValue = book.attributeValue("sn");
                System.out.println(new Book(snValue,nametext,Double.parseDouble(priceText),authorText));
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    package com.atguigu.pojo;
    
    import java.math.BigDecimal;
    
    public class Book {
        private String sn;
        private String name;
        private Double price;
        private String author;
        public Book() {
    
        }
        public Book(String sn, String name, Double price, String author) {
            this.sn = sn;
            this.name = name;
            this.price = price;
            this.author = author;
        }
        public String getSn() {
            return sn;
        }
        public void setSn(String sn) {
            this.sn = sn;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Double getPrice() {
            return price;
        }
        public void setPrice(Double price) {
            this.price = price;
        }
        public String getAuthor() {
            return author;
        }
        public void setAuthor(String author) {
            this.author = author;
        }
        @Override
        public String toString() {
            return "Book{" +
                    "sn='" + sn + '\'' +
                    ", name='" + name + '\'' +
                    ", price=" + price +
                    ", author='" + author + '\'' +
                    '}';
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
  • 相关阅读:
    04.一语详解SpringBoot全局配置文件
    车间作业分析重点分析的内容是哪些?
    Thread.currentThread().getName() 和 this.getName()区别详解
    OpenAI接口开发指南
    深度学习目标检测YOLO系列(v1-v3+tinyv3)
    Shell echo命令
    C++命名空间
    AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘
    Leetcode652. 寻找重复的子树
    阿里云服务器4核8G配置多少钱?新购和续费价格分别是多少?
  • 原文地址:https://blog.csdn.net/qq_53798578/article/details/127095054