• Java 进阶day14XML Dom4j 工厂模式 Base64


    目录

    知识点1、XML

    概念

    XML的全称为(eXtensible Markup Language),是一种可扩展的标记语言。

    XML的作用(保存数据)

    不同软件之间进行数据传输。
    各种框架的配置文件。

    XML文件的后缀名为:xml

    文档声明必须是XML第一行

    version: 版本号,该属性是必须存在的
    encoding: 文件编码,该属性不是必须的(一般取值都是UTF-8)
    文档声明告诉别人这个一个XML文件

    标签也称为元素

    xml标签名字都是小写的

    标签必须成对出现

    在这里插入图片描述

    特殊的标签可以不成对,但是必须有结束标记

    在这里插入图片描述

    标签中可以定义属性,属性和标签名空格隔开
    属性值必须用引号引起来

    在这里插入图片描述

    在一个XML文档中,只允许有一个根标签

    在XML中注释不能嵌套(Ctrl + / )

     在这里插入图片描述

    
    
        
        小一
        18
        100
        
    ]]> 2 < 3 小二 20 99
    ]]>
    • 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

    XML约束

    因为XML文件的标签和属性可以随意扩展,通过XML约束来限定XML文件中可使用的标签以及属性。

    XML的两种约束

    DTD约束,比较简单,功能相对弱
    Schema,比较复杂,功能相对强

    DTD约束

    在这里插入图片描述
    在这里插入图片描述

    
    
    
    
    
    
    
    
    
    
    
        
            Java
            12
            Au
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    DTD的不足

    不能验证数据类型 (比如,可以在price中写入“呵呵”,这是不正确的)
    因为DTD是一个文本文件,本身不能验证是否正确。

    Schema约束

    Schema约束介绍

    Schema约束文件扩展名(XML Schema Definition)
    XML模式定义:xsd
    Schema 功能更强大,数据类型约束更完善
    Schema文件本身也是XML文件,所以也有根元素,根元素的名字叫:schema
    一个XML中可以引用多个Schema约束文件

    <根标签
    xmlns=“命名空间”
    xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
    xsi:schemaLocation=“命名空间 schema约束文件名”>
    < !-- 编写XML元素 -->

    在这里插入图片描述

    
    
    <书架
            xmlns="http://www.itcast.cn/"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.itcast.cn/ books.xsd">
        
        <书>
            <书名>Java
            <作者>呵呵
            <售价>88
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    知识点2、XML解析

    什么是XML的解析

    使用程序读取XML中的数据

    两种解析方式

    Dom4j解析
    XPath解析

    Dom4j(Dom for java)

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    public class Contact {
        private String id;
        private boolean vip;
        private String name;
        private String gender;
        private String email;
    	\默认无参、有参、getset
    }
    
    
    
    
        
            潘金莲
            
            panpan@itcast.cn
        
        
            武松
            
            wusong@itcast.cn
        
        
            武大狼
            
            wuda@itcast.cn
        
    
    
    • 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

    获取XML文件中的元素

    public class Test {
        public static void main(String[] args) throws DocumentException {
            //1、创建解析器
            SAXReader reader = new SAXReader();
            //2、解析XML
            Document doc = reader.read("day14\src\Contact.xml");
            //3、获得根标签
            Element rootElement = doc.getRootElement();
            //4、创建集合保存元素
            ArrayList list = new ArrayList<>();
            //5、获得所有子标签
            List elements = rootElement.elements();
            for (Element element : elements) {
                //6、获取数据
                String id = element.attributeValue("id");
                String vips = element.attributeValue("vip");
                boolean vip = Boolean.parseBoolean(vips);
                String name = element.elementText("name");
                String gender = element.elementText("gender");
                String email = element.elementText("email");
                // 7、创建对象
                Contact c = new Contact(id, vip, name, gender, email);
                // 8、保存数据
                list.add(c);
            }
            // 9、打印数据
            for (Contact c : list) {
                System.out.println(c);
            }
    
        }
    }
    
    • 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

    XPath

    需要导入两个包(XPath是对dom4j的加强)
    导入jar包 ( dom4j 和 jaxen-1.1.2.jar )

    在这里插入图片描述

    绝对路径:/根元素/子元素/孙元素
    相对路径:./子元素/孙元素 ( 注意:前面有个 . )

    全文搜索
    在这里插入图片描述属性查找
    在这里插入图片描述

    public class Test2 {
        private static Document document;
        static{
            try {
                SAXReader reader = new SAXReader();
                document = reader.read("day14\src\Contact.xml");
            } catch (DocumentException e) {
                e.printStackTrace();
            }
        }
    
    
        public static void main(String[] args) {
            test1();
            System.out.println("----------------------");
            test2();
            test3();
            test4();
        }
        
        //绝对路径
        public static void test1(){
            List nodes = document.selectNodes("contactList/contact/name");
            for (Node node : nodes) {
                System.out.println( node.getName() + " : " + node.getText());
            }
        }
        
        //相对路径
        public static void test2(){
            Element rootElement = document.getRootElement();
            List nodes = rootElement.selectNodes("./contact/email");
            for (Node node : nodes) {
                System.out.println(node.getName() + " : " + node.getText());
            }
        }
        
        //全文搜索
        public static void test3(){
            List nodes = document.selectNodes("//contact/name");
            for (Node node : nodes) {
                System.out.println(node.getName());
            }
        }
        
        //属性查找
        public static void test4(){
            List nodes = document.selectNodes("//contact[@id = '1']");
    
            for (Node node : nodes) {
                System.out.println(node.getName());
            }
        }
    }
    
    • 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
    • 53
    • 54

    注意:

    1、xml文件一般放在src下
    2、和所有写代码的路径不能有中文或空格

    知识点3、工厂模式

    简单工厂模式用于创建对象的。通过专门定义一个类来负责创建其他类的实例。

    工厂模式作用

    解决类与类之间的耦合问题,屏蔽了外界对具体类的依赖,让类的创建更加简单。

    interface Car {
        void run();
    }
    
    
    class Bmw implements Car{
        @Override
        public void run() {
            System.out.println("Bmw");
        }
    }
    
    class Benz implements Car{
        @Override
        public void run() {
            System.out.println("Benz");
        }
    }
    
    class Company {
        public static Car Creatcar(String car){
            if (car.equals("b1")){
                return new Benz();
            }if( car.equals("b2")){
                return new Bmw();
            }else {
                return null;
            }
        }
    }
    
    
    public class Test {
        public static void main(String[] args) {
            Car b1 = Company.Creatcar("b1");
            b1.run();
            Car b2 = Company.Creatcar("b2");
            b2.run();
        }
    }
    
    • 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

    知识点4、Base64

    在Java 8中,Base64编码已经成为Java类库的标准。Java 8 内置了 Base64 编码的编码器和解码器。

    编码: 文字变成特殊的64字符
    解码: 特殊的64字符变成文字

    基本的Base64: 输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。
    URL的Base64: 输出映射到一组字符A-Za-z0-9-_,输出是URL和文件。
    MIME的Base64: 输出映射到MIME友好格式。输出每行不超过76字符。(超过会换行)

    在这里插入图片描述

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    QByteArray,char转float的方法以及计算机大小端判断
    springboot+vue【前后端分离】博客项目(已部署、大家可以来玩玩)
    2310D从导入c转换C至D
    web前端课程设计(HTML和CSS实现餐饮美食文化网站)静态HTML网页制作
    java之面向对象编程特性:继承
    『第十章』仪态万千的雨燕:UIKit 和 SwiftUI
    go语言中的协程和Java中线程以及进程的区别
    并发编程--多线程基础知识总结
    输入时并未按照格式,没注意汉字符号
    深入浅出Java多线程(四):线程状态
  • 原文地址:https://blog.csdn.net/m0_66557301/article/details/126104422