当前位置:   article > 正文

使用Dom4j解析XML文件

dom4j解析xml文件

一、XML解析 基础知识

1.1 XML解析种类

        XML解析方式有4种,分别是:DOM解析、SAX解析、JDOM解析、DOM4j解析。其中前两种属于基础方法,是官方提供的与平台无关的解析方式后两种属于扩展方法,是在基础方法上拓展出来的,只适用于java平台
        

1、DOM解析:JDK中都自带了,无需再导包。要求解析器将整个XML文件全部加载到内存种,生成一个Document对象。

  • 优点:元素和元素之间保留结构、关系,可以针对元素进行增删改查操作
  • 缺点:XML文件过大,可能会导致内存溢出

2、SAX解析:是一种速度更快,更加高效的解析方式,它是逐行扫描的,边扫描边解析,并且以事件驱动的方式来进行具体的解析,每解析一行都会触发一个事件。

  • 优点:不会出现内存溢出的问题可以处理大文件
  • 缺点:智能读,不能写

1.2 解析器

解析器就是根据不同的解析方式提供具体的实现,为了方便开发人员解析XML,有一些方便操作的类库。

  • dom4j:是比较简单的XML解析的类库
  • Jsoup:是功能强大的DOM方式解析的类库,尤其是对HTML的解析更加方便

二、使用dom4j解析XML

2.1 搭建环境

创建一个maven项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将项目的maven库改为本地仓库
在这里插入图片描述

加入依赖

<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.1.3</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

resources根目录下创建user.xml文件,

在这里插入图片描述
并在user.xml文件中添加如下内容

<?xml version="1.0" encoding="UTF-8" ?>
<users>
    <user id="10001" country="Chinese" source="Android">
        <id>10001</id>
        <name>admin</name>
        <password>111111</password>
    </user>

    <user id="10002" country="Chinese" source="ios">
        <id>10002</id>
        <name>tony</name>
        <password>666666</password>
    </user>

</users>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2.2 解析XML文件

解析步骤介绍

1、创建解析器对象

 //创建解析器对象
    SAXReader saxReader = new SAXReader();
  • 1
  • 2

2、使用解析器对象读取XML文档生成Document对象

 Document document = saxReader.read(Dom4jParseUserXmlTest.class.getClassLoader().getResource("user.xml"));
  • 1

3、根据Document对象获取XML的元素(标签信息)

            //3.1 获取XML文件的根节点
            Element rootElement = document.getRootElement();
            System.out.println("user.xml文件的根节点的名字为"+rootElement.getName());
            //3.2 获取XML文件的根节点下的子节点
            System.out.println("获取根标签users的子标签列表");
            List<Element> usersSubElementList = rootElement.elements();
            for (Element userElement : usersSubElementList) {
                //String attributeValue(String name);获取指定属性名称的属性值
                System.out.println("users标签的子标签"+userElement.getName());
                System.out.println("users标签的子标签的id属性值是"+userElement.attributeValue("id"));
                System.out.println("users标签的子标签的country属性值"+userElement.attributeValue("country"));
                System.out.println("users标签的子标签的sources属性值"+userElement.attributeValue("source"));
                System.out.println("3、获取user的子标签列表");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

创建名称为Dom4jParseUserXmlTest的类,并且添加如下内容,开始解析

package com.li.dom4j;

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

import java.util.List;

/**
 * @author potential
 */
public class Dom4jParseUserXmlTest {
    public static void main(String[] args)  {
        //1、创建解析器对象
        SAXReader saxReader = new SAXReader();
        //2、使用解析器对象读取XML文档生成Document对象
        try {
            Document document = saxReader.read(Dom4jParseUserXmlTest.class.getClassLoader().getResource("user.xml"));
            //3、根据Document对象获取XML的元素标签信息

            /**
             * 1、org.dom4j.Document常用方法
             *      Element getRootElement(); 获取XML文件的根节点
             * 2、org.dom4j.Element常用方法
             *      String getName();返回
             *      List<Element>elements();获取标签的子标签
             */
            //3.1 获取XML文件的根节点
            Element rootElement = document.getRootElement();
            System.out.println("user.xml文件的根节点的名字为"+rootElement.getName());
            //3.2 获取XML文件的根节点下的子节点
            System.out.println("获取根标签users的子标签列表");
            List<Element> usersSubElementList = rootElement.elements();
            for (Element userElement : usersSubElementList) {
                //String attributeValue(String name);获取指定属性名称的属性值
                System.out.println("users标签的子标签"+userElement.getName());
                System.out.println("users标签的子标签的id属性值是"+userElement.attributeValue("id"));
                System.out.println("users标签的子标签的country属性值"+userElement.attributeValue("country"));
                System.out.println("users标签的子标签的sources属性值"+userElement.attributeValue("source"));
                System.out.println("3、获取user的子标签列表");
                List<Element> userSubElementList = userElement.elements();
                for (Element userSubElement : userSubElementList) {
                    System.out.println("user标签下的子标签名字是"+userSubElement.getName());
                    //String getText();获取标签的文本
                    System.out.println("user标签下的子标签的文本是"+userSubElement.getText());

                }
            }
            //获取users标签的第一个user标签
            Element firstUserElement = rootElement.element("user");
            //获取第一个user标签下的子标签password属性的文本
            //String elementText(String name);获取指定名称的子标签的文本
            String password = firstUserElement.elementText("password");
            System.out.println("第一个user标签的子标签password的文本"+password);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}
  • 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

运行结果展示
在这里插入图片描述

2.3 dom4j重要API说明

org.dom4j.Document常用方法

Element getRootElement()获取XML文件的根节点

org.dom4j.Element常用方法

String getName()返回元素名称
Listelements()获取标签的子标签
String attributeValue(String name)获取指定属性名称的属性值
String getText()获取标签的文本
String elementText(String name)获取指定名称的子标签的文本
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/817690
推荐阅读
  

闽ICP备14008679号