XML,XML解析,设计模式

XML概述

XML是可扩展标记语言的缩写,它是一种数据表示格式,可以描述非常复杂的数据结构,常用传输和存储数据

XML,XML解析,设计模式_第1张图片

XML的几个特点和使用场景

XML,XML解析,设计模式_第2张图片 XML,XML解析,设计模式_第3张图片 作用:存储和传输文件

            作为软件的配置文件

XML的创建,语法规则

XML的创建

就是创建一个XML类型的文件,要求文件的后缀名必须使用xml,eg:hello_world.xml

IDEA创建XML文件的操作步骤

XML,XML解析,设计模式_第4张图片

 xml的语法规则

XML,XML解析,设计模式_第5张图片

XML的标签(元素)规则 

XML,XML解析,设计模式_第6张图片

XML的其他组成 

XML,XML解析,设计模式_第7张图片

总结 

XML,XML解析,设计模式_第8张图片 XML的文档

 文档约束

XML,XML解析,设计模式_第9张图片文档约束:是用来限制xml文件中的标签以及属性应该怎么写 (以此来强制约束程序员必须按照文档约束的规定来编写xml文件)

XML文档约束——DTD的使用 

XML,XML解析,设计模式_第10张图片



<书架>
    <书>
        <书名>javaEE SSM
        <作者>NewBoy
        <售价>30
    
    <书>
        <书名>人鬼情未了
        <作者>李四
        <售价>38
    

XML,XML解析,设计模式_第11张图片

XML约束文档——schema约束

XML,XML解析,设计模式_第12张图片 XML,XML解析,设计模式_第13张图片

XML,XML解析,设计模式_第14张图片

 ​​​XML,XML解析,设计模式_第15张图片

XML,XML解析,设计模式_第16张图片

 XML的解析技术

概述

XML,XML解析,设计模式_第17张图片

 XML解析:实用程序读取XML中的数据

XML,XML解析,设计模式_第18张图片

 两种解析方式

        SAX解析,DOM解析

DOM常用的解析工具

XML,XML解析,设计模式_第19张图片

XML,XML解析,设计模式_第20张图片 DOM解析常用的技术框架:DOM4J

DOM4J解析XML文件

XML,XML解析,设计模式_第21张图片

XML,XML解析,设计模式_第22张图片 XML,XML解析,设计模式_第23张图片

package com.itxue.d1_dom4j;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

/*
    学会使用DOM4j解析XML文件中的数据
 */
public class Dom4jHelloWorld {
    @Test
    public void parseXMLDate() throws Exception {
//      1.创建一个Dom4j的解析器对象,代表整个dom4j框架
        SAXReader saxReader = new SAXReader();
//2.把XML文件加载到内存中成为一个Document文档对象
  //      Document d = saxReader.read(new File("D:\\IDEA\\junit-reflect-annotation-proxy-app\\xml\\src\\student.xml"));


//        注意:getResourceAsStream中的/ 是直接去src下寻找文件
        InputStream is = Dom4jHelloWorld.class.getResourceAsStream("/student.xml");
        Document d = saxReader.read(is);
//        3.获取根元素对象
        Element root = d.getRootElement();
        String name = root.getName();
        System.out.println(name);
    }
}

Dom4J解析XML文件中的各种节点

XML,XML解析,设计模式_第24张图片

package com.itxue.d1_dom4j;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;

/*
    学会使用DOM4j解析XML文件中的数据
 */
public class Dom4jHelloWorld {
    @Test
    public void parseXMLDate() throws Exception {
//      1.创建一个Dom4j的解析器对象,代表整个dom4j框架
        SAXReader saxReader = new SAXReader();
//2.把XML文件加载到内存中成为一个Document文档对象
  //      Document d = saxReader.read(new File("D:\\IDEA\\junit-reflect-annotation-proxy-app\\xml\\src\\student.xml"));


//        注意:getResourceAsStream中的/ 是直接去src下寻找文件
        InputStream is = Dom4jHelloWorld.class.getResourceAsStream("/student.xml");
        Document d = saxReader.read(is);
//        3.获取根元素对象

        Element root = d.getRootElement();
        String name = root.getName();
        System.out.println(name);


//        4.拿根元素的全部子元素
//        List sonEles = root.elements();
//        for (Element sonEle : sonEles) {
//            System.out.println(sonEle.getName());
            
//            5.那某个子元素
            //        默认提取第一个子元素对象
        Element student = root.element("student");
        System.out.println(student.elementText("name"));
        System.out.println(student.elementTextTrim("name"));//去前后空格

//        获取元素的属性值
        Attribute idAttr = student.attribute("id");
        System.out.println(idAttr.getName() + idAttr.getValue());
//        直接提取属性值
        System.out.println(student.attributeValue("id"));
        System.out.println(student.attributeValue("vip"));

    }
    }

Dom4J解析XML文件——案例实战 

eg:XML,XML解析,设计模式_第25张图片



        
             俄罗斯 
            18
            
        
        
            张三
            20
            
        
        
            李四
            33
            不知道
        

        
            刘依男
            18
            
        
        
            刘浩
            20
            
        
        
            孙宏恩
            33
            不知道
        


package com.itxue.d1_dom4j;

/*
* 
             俄罗斯 
            18
            
        
* */
public class Students {
    private String name;
    private int id;
    private boolean vip;
    private char sex;
    private int age;

    public Students() {
    }

    public Students(String name, int id, boolean vip, char sex, int age) {
        this.name = name;
        this.id = id;
        this.vip = vip;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public boolean isVip() {
        return vip;
    }

    public void setVip(boolean vip) {
        this.vip = vip;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Students{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", vip=" + vip +
                ", sex=" + sex +
                ", age=" + age +
                '}';
    }
}
package com.itxue.d1_dom4j;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class Dom4JTest2 {
    public static void main(String[] args) throws Exception {
//       1.导入框架
//       2.创建SAXReader对象
       SAXReader saxReader = new SAXReader();
//      3.加载XML文件成为文档对象Document对象
       Document document = saxReader.read(Dom4JTest2.class.getResourceAsStream("/student.xml"));
//       4.先拿到根元素
       Element root = document.getRootElement();
//        5.提取student子元素
       List studentEles = root.elements("student");
//       6.准备ArrayList集合封装联系人信息
       List students = new ArrayList<>();
//       7.遍历student子元素
      for (Element studentEle : studentEles) {
         //         每一个子元素就是一个学生对象
         Students s = new Students();
         s.setId(Integer.valueOf(studentEle.attributeValue("id")));
         s.setVip(Boolean.valueOf(studentEle.attributeValue("vip")));
         s.setAge(Integer.valueOf(studentEle.elementText("age")));
         s.setName(studentEle.elementText("name"));
         s.setSex(studentEle.elementText("sex").charAt(0));
//         9.把学生对象加入到List集合中
         students.add(s);
      }
//       10.遍历List集合
        for (Students student : students) {
            System.out.println(student);
        }
         
      }
   }

 XML的检索技术:Xpath

XML,XML解析,设计模式_第26张图片

 Xpath使用路径表达式来定位XML文档中的元素节点或属性节点

案例

XML,XML解析,设计模式_第27张图片

 Xpath的四大检索方案

XML,XML解析,设计模式_第28张图片

XML,XML解析,设计模式_第29张图片

XML,XML解析,设计模式_第30张图片

XML,XML解析,设计模式_第31张图片

XML,XML解析,设计模式_第32张图片

XML,XML解析,设计模式_第33张图片XML,XML解析,设计模式_第34张图片

XML,XML解析,设计模式_第35张图片

XML,XML解析,设计模式_第36张图片 设计模式——工厂模式

 什么是工厂模式

XML,XML解析,设计模式_第37张图片

工厂设计模式的作用:
工厂的方法可以封装对象的创建细节,,不如:为该对象进行加工和数据注入

可以实现类与类之间的解耦操作(核心思想)

设计模式——装饰设计模式

        创建一个新类,包装原始类,从而在新类中提升原来类的功能

装饰设计模式的作用:

        装饰模式指的是在不改变原类的基础上,动态的扩展一个类的功能

XML,XML解析,设计模式_第38张图片

父类 

package com.itxue.d4_decorator_pattern;

public abstract class InputStream {
    public abstract int read();
    public abstract int read(byte[] buffer);
}

 原始类

package com.itxue.d4_decorator_pattern;

public class FileInputStream extends InputStream{

    @Override
    public int read() {
        System.out.println("低性能读取了一个字节a");
        return 97;
    }

    @Override
    public int read(byte[] buffer) {
        buffer[0] = 97;
        buffer[1] = 98;
        buffer[2] = 99;
        System.out.println("低性能读取了一个字节数组");
        return 3;
    }
}

装饰类

package com.itxue.d4_decorator_pattern;



public class BufferedInputStream extends InputStream{
    private InputStream is;
    public BufferedInputStream(InputStream is){
        this.is = is;
    }
    @Override
    public int read() {
        System.out.println("提供8KB的缓冲区,提高读数据功能");

        return is.read();
    }

    @Override
    public int read(byte[] buffer) {
        System.out.println("提供8KB的缓冲区,提高读数据功能");

        return is.read(buffer);
    }
}

运行

package com.itxue.d4_decorator_pattern;

public class DecoratorPattern {
    public static void main(String[] args) {
        InputStream is = new BufferedInputStream(new FileInputStream());
        System.out.println(is.read());
        System.out.println(is.read(new byte[3]));
    }
}

XML,XML解析,设计模式_第39张图片

你可能感兴趣的:(xml,java,android)