• 暑期JAVA学习(47)XML解析技术


    一、XML解析技术概述

    (1)XML的数据的作用是什么,最终需要怎么处理?
    • 存储数据、做配置信息、进行数据传输。
    • 最终需要被程序进行读取,解析里面的信息。
    (2)什么是XML解析
    • 使用程序读取XML中的数据
    (3)两种解析方式
    • SAX解析
    • DOM解析
    (4)Dom常见的解析工具
    名称说明
    JAXPSUN公司提供的一套XML的解析的API
    JDOMJDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。
    dom4j是JDOM的升级品,用来读写XML文件的。具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom 技术,同时它也是一个开放源代码的软件,Hibernate也用它来读写配置文件。
    jsoup功能强大DOM方式的XML解析开发包,尤其对HTML解析更加方便
    (5)DOM解析解析文档对象模型

    在这里插入图片描述

    (6)Dom解析常用技术框架
    • Dom4J

    二、Dom4J解析XML文件

    (1)案例:使用Dom4J解析出XML文件
    需求
    • 使用Dom4J把一个XML文件的数据进行解析
    分析

    ①下载Dom4j框架,官网下载。
    ②在项目中创建一个文件夹:lib
    ③将dom4j-2.1.1.jar文件复制到 lib 文件夹
    ④在jar文件上点右键,选择 Add as Library -> 点击OK
    ⑤在类中导包使用

    导入Dom4j框架

    ①下载Dom4j框架,官网下载。

    • 搜索dom4j,进入官网下载
      在这里插入图片描述
      在这里插入图片描述

    • 下载并解压之后如下
      在这里插入图片描述

    • 双击index.html,就可以看到dom4j的API,方便使用
      在这里插入图片描述
      在这里插入图片描述
      ②在项目中创建一个文件夹:lib
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      ③将dom4j-2.1.1.jar文件复制到 lib 文件夹

    • 复制dom4j-2.1.1.jar文件在这里插入图片描述
      在这里插入图片描述

    • 将dom4j-2.1.1.jar文件复制到 lib 文件夹
      在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    ④在jar文件上点右键,选择 添加到库 -> 点击确定
    在这里插入图片描述
    在这里插入图片描述
    ⑤在类中导包使用

    (2)Dom4j解析XML-得到Document对象
    ①SAXReader类
    构造器/方法说明
    public SAXReader()创建Dom4J的解析器对象
    Document read(String url)加载XML文件成为Document对象
    ②Document类
    方法名说明
    Element getRootElement()获得根元素对象

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

    (1)Dom4j解析XML的元素、属性、文本
    方法名说明
    List elements()得到当前元素下所有子元素
    List elements(String name)得到当前元素下指定名字的子元素返回集合
    Element element(String name)得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
    String getName()得到元素名字
    String attributeValue(String name)通过属性名直接得到属性值
    String elementText(子元素名)得到指定名称的子元素的文本
    String getText()得到文本
    (2)具体实现

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

    /**
     目标:学会使用dom4j解析XML文件中的数据。
     1、导入dom4j框架。
     2、准备一个XML文件。
     */
    public class Dom4JHelloWorldDemo1 {
        @Test
        public void parseXMLData() throws Exception {
            // 1、创建一个Dom4j的解析器对象,代表了整个dom4j框架
            SAXReader saxReader = new SAXReader();
    
            // 2、把XML文件加载到内存中成为一个Document文档对象
            // Document document = saxReader.read(new File("SummerTryTest2\\src\\Contacts.xml")); // 需要通过模块名去定位
            // Document document = saxReader.read(new FileInputStream("SummerTryTest2\\src\\Contacts.xml"));
    
            // 注意: getResourceAsStream中的/是直接去src下寻找的文件
            InputStream is = Dom4JHelloWorldDemo1.class.getResourceAsStream("/Contacts.xml");
            Document document = saxReader.read(is);
    
            // 3、获取根元素对象
            System.out.println("-----------------------获取根元素对象------------------------");
            Element root = document.getRootElement();
            System.out.println(root.getName());
    
    
            // 4、拿根元素下的全部子元素对象(一级)
            System.out.println("-------------------拿根元素下的全部子元素对象-------------------");
            List sonEles =  root.elements();
            for (Element sonEle : sonEles) {
                System.out.println(sonEle.getName());
            }
    
            System.out.println("---------------根据名称拿根元素下的全部子元素对象-----------------");
            List sonEles2 =  root.elements("contact");
            for (Element sonEle : sonEles2) {
                System.out.println(sonEle.getName());
            }
    
            System.out.println("-----------------------拿某个子元素-------------------------");
            // 拿某个子元素
            Element userEle = root.element("user");
            System.out.println(userEle.getName());
    
            System.out.println("----------------------------------------------------------");
            // 默认提取第一个子元素对象 (Java语言。)
            Element contact = root.element("contact");
            // 获取子元素文本
            System.out.println(contact.elementText("name"));
            // 去掉前后空格
            System.out.println(contact.elementTextTrim("name"));
            // 获取当前元素下的子元素对象
            Element email = contact.element("email");
            System.out.println(email.getText());
            // 去掉前后空格
            System.out.println(email.getTextTrim());
    
            // 根据元素获取属性值
            Attribute idAttr = contact.attribute("id");
            System.out.println(idAttr.getName() + "-->" + idAttr.getValue());
            // 直接提取属性值
            System.out.println(contact.attributeValue("id"));
            System.out.println(contact.attributeValue("vip"));
    
        }
    }
    
    • 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
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    
    
        
               潘金莲  
            
            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
    (3)Dom4J的解析思想
    • 得到文档对象Document,从中获取元素对象和内容。

    四、Dom4J解析XML文件-案例实战

    (1)XML解析案例
    • 需求:利用Dom4J的知识,将Contact.xml文件中的联系人数据封装成List集合,其中每个元素是实体类Contact。打印输出 List 中的每个元素。
      在这里插入图片描述
      在这里插入图片描述
    (2)具体实现

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

    
    
        
               潘金莲  
            
            123456@qq.com
        
        
            武松
            
            789123@qq.com
        
        
            武大郎
            
            147258@qq.com
        
        
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    /**
     *     
     *        潘金莲  
     *     
     *     panpan@itcast.cn
     *     
     */
    public class Contact {
        private String name;
        private int id;
        private boolean vip;
        private char gender;
    
        public Contact() {
        }
    
        public Contact(String name, int id, boolean vip, char gendar, String email) {
            this.name = name;
            this.id = id;
            this.vip = vip;
            this.gender = gendar;
            this.email = email;
        }
    
        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 getGender() {
            return gender;
        }
    
        public void setGender(char gender) {
            this.gender = gender;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        private String email;
    
        @Override
        public String toString() {
            return "Contact{" +
                    "name='" + name + '\'' +
                    ", id=" + id +
                    ", vip=" + vip +
                    ", gender=" + gender +
                    ", email='" + email + '\'' +
                    '}';
        }
    }
    
    
    • 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
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    public class Dom4JTest {
        @Test
        public void parseTOList() throws Exception {
            // 需求:解析XML中的数据成为一个List集合对象
            // 1.导入dom4j框架(已经完成啦)
            // 2.创建SaxReader对象
            SAXReader saxReader = new SAXReader();
            // 3.加载XML文件成为文档对象Document对象
            Document document = saxReader.read(Dom4JTest.class.getResourceAsStream("/Contacts.xml"));
            // 4.先拿根元素
            Element root = document.getRootElement();
            // 5.提取contact子元素
            List contactEles = root.elements("contact");
            // 6.准备一个ArrayList集合封装联系人信息
            List contacts = new ArrayList<>();
            // 7.遍历Contact子元素
            for (Element contactEle : contactEles) {
                // 8.每个子元素都是一个联系人对象
                Contact contact = new Contact();
                contact.setId(Integer.valueOf(contactEle.attributeValue("id")));
                contact.setVip(Boolean.valueOf(contactEle.attributeValue("vip")));
                contact.setName(contactEle.elementTextTrim("name"));
                contact.setGender(contactEle.elementTextTrim("gender").charAt(0));
                contact.setEmail(contactEle.elementTextTrim("email"));
                // 9.把联系人对象数据加入到List集合
                contacts.add(contact);
            }
    
            // 10.遍历List集合
            for (Contact contact : contacts) {
                System.out.println(contact.toString());
            }
        }
    }
    
    • 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
    (3)Dom4J的解析后的数据形式。

    通常数据会封装成Java的对象,如单个对象,或者集合对象形式

  • 相关阅读:
    浅谈防勒索病毒方案之主机加固
    多线程消息处理
    基于MATLAB的GPS卫星绕地运行轨迹动态模拟仿真
    2023年钙拮抗剂原料药分析:高血压患者数量上升推动需求增长[图]
    XXE漏洞详解
    vue造轮子完整指南--npm组件包开发步骤
    (selenium element not interactable)selenium的send_keys怎么往codemirror中发送数据
    解压主播狂揽4000w+播放,快手美食赛道又添新风向?
    电商平台亚马逊国际站点获得AMAZON商品详情API接口、卖家信息、销量、价格、商品规格信息列表参数详情示例分享案例
    yaml配置
  • 原文地址:https://blog.csdn.net/xjl243636988/article/details/126334909