采取Dom4j分解XML数据

原创
小哥 3年前 (2022-11-07) 阅读数 101 #大杂烩

使用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图书馆被改为本地仓库。

加入依赖



    org.dom4j
    dom4j
    2.1.3

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


并在 user.xml 将以下内容添加到文件中



    
        10001
        admin
        111111
    

    
        10002
        tony
        666666
    

2.2 解析XML文件

解决步骤简介

1,创建分析器对象。

 //创建分析器对象
    SAXReader saxReader = new SAXReader();

2,使用解析器对象进行读取。XML文档生成Document对象

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

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 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子标签列表");

创建名称 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();返回
             *      Listelements();获取标签的子标签
             */
            //3.1 获取XML文件的根节点
            Element rootElement = document.getRootElement();
            System.out.println("user.xml文件的根节点的名称为"+rootElement.getName());
            //3.2 获取XML文件根节点下的子节点。
            System.out.println("获取根标签users子标签列表");
            List 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 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();
        }
    }
}

操作结果显示

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)

获取指定名称的子标签的文本。

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除