Dom4j解析XML文件

1、pom.xml

XML 复制代码
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.3</version>
        </dependency>
    </dependencies>

2、Contacts.xml

XML 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<contactList>
    <contact id="1" vip="true">
        <name>张三丰</name>
        <gender>男</gender>
        <email>zsf@com.csdn</email>
    </contact>
    <contact id="2" vip="false">
        <name>张翠山</name>
        <gender>男</gender>
        <email>zcs@com.csdn</email>
    </contact>
    <contact id="3" vip="false">
        <name>张无忌</name>
        <gender>男</gender>
        <email>zwj@com.csdn</email>
    </contact>
</contactList>

3、XMLParse

java 复制代码
package com.csdn;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.ArrayList;
import java.util.List;
public class XMLParse {
    public static void main(String[] args) throws DocumentException {
        //需求:解析XML中的数据成为一个List集合对象。
        //1、导入依赖
        //2、创建SaxReader对象
        SAXReader saxReader = new SAXReader();
        //3、加载XML文件成为文档对象Document对象
        Document document = saxReader.read(XMLParse.class.getResourceAsStream("/Contacts.xml"));
        //4、先拿根元素
        Element root = document.getRootElement();
        //5、提取contact子元素
        List<Element> contactEles = root.elements("contact");
        //6、准备一个ArrayList集合封装联系人信息
        List<Person> contacts = new ArrayList<>();
        //7、遍历Contact子集合
        for (Element contactEle : contactEles) {
            //8、每一个子元素都是一个Person对象
            Person person = new Person();
            person.setId(Integer.valueOf(contactEle.attributeValue("id")));
            person.setVip(Boolean.valueOf(contactEle.attributeValue("vip")));
            person.setName(contactEle.elementTextTrim("name"));
            person.setGender(contactEle.elementTextTrim("gender").charAt(0));
            person.setEmail(contactEle.elementText("email"));
            //9、把联系人对象数据加入到List集合
            contacts.add(person);
        }
        //10、遍历List集合
        for (Person contact : contacts) {
            System.out.println(contact);
        }
    }
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class Person {
    private String name;
    private int id;
    private boolean vip;
    private char gender;
    private String email;
}
Person(name=张三丰, id=1, vip=true, gender=男, email=zsf@com.csdn)
Person(name=张翠山, id=2, vip=false, gender=男, email=zcs@com.csdn)
Person(name=张无忌, id=3, vip=false, gender=男, email=zwj@com.csdn)

4、attributeValue

java 复制代码
    /**
     * 获取指定属性名的属性值。
     *
     * @param name 属性名
     * @return 属性值
     */
    public String attributeValue(String name) { /* compiled code */ }
    这个函数是一个Java方法,它接收一个参数name,返回一个String类型的值。根据给定的参数name,它返回一个相关的属性值。

5、elementTextTrim

java 复制代码
    /**
     * 去除指定元素的文本中的空白字符,并返回文本内容。
     *
     * @param name 元素的名称
     * @return 去除空白字符的元素文本
     */
    public String elementTextTrim(String name) {
        /* compiled code */
    }
    这是一个Java函数,返回给定XML元素名称的文本内容,并去除首尾的空格

6、System.out.println(document.getRootElement());

java 复制代码
org.dom4j.tree.DefaultElement@4cc77c2e [Element: <contactList attributes: []/>]

7、System.out.println(root.elements("contact"));

java 复制代码
[org.dom4j.tree.DefaultElement@6ed3ef1 [Element: <contact attributes: [
java 复制代码
org.dom4j.tree.DefaultAttribute@2437c6dc
[Element: <contact attributes: 
[org.dom4j.tree.DefaultAttribute@2437c6dc 
[Attribute: name id value "1"],
 org.dom4j.tree.DefaultAttribute@1f89ab83 
[Attribute: name vip value "true"]]/>], 
java 复制代码
org.dom4j.tree.DefaultElement@e73f9ac
[Element: <contact attributes: 
[org.dom4j.tree.DefaultAttribute@61064425 
[Attribute: name id value "2"],
 org.dom4j.tree.DefaultAttribute@7b1d7fff 
[Attribute: name vip value "false"]]/>],
java 复制代码
org.dom4j.tree.DefaultElement@299a06ac 
[Element: <contact attributes: 
[org.dom4j.tree.DefaultAttribute@383534aa 
[Attribute: name id value "3"], 
org.dom4j.tree.DefaultAttribute@6bc168e5 
[Attribute: name vip value "false"]]/>]]

8、扩展

在Java中, XML(可扩展标记语言)有以下作用:

  1. 数据交换: XML可以用来在不同平台之间交换数据,使得数据传输更加简单。

  2. 数据存储: XML文档可以用来存储应用程序的配置信息或者运行时的数据。这些数据可以根据需要进行修改或者查询。

  3. 数据展示: XML文档可以通过样式表(如XSLT)转换为HTML或者其他格式的数据,以便于Web应用程序中展示或用户界面的生成。

  4. Web服务: XML通过SOAP(简单对象访问协议)支持Web服务,这使得不同的应用程序可以通过网络互相访问和交换数据。

  5. 数据传输: XML文档可以通过HTTP协议传输,这使得客户端和服务器之间的数据传输更加高效和简单。

Java中XML的主要作用是作为数据交换的格式。它可以用来描述数据结构、存储数据、传递数据等。在Java中,XML常用于以下方面:

1、配置文件:Java程序中的配置文件通常采用XML格式,这样可以使得配置文件更加易于阅读和理解。

2、Web服务:XML是Web服务中常用的数据交换格式,通过XML可以轻松地将数据传递给远程服务器或服务。

3、持久化:XML格式可以用于将Java对象转换为XML格式,然后将其写入文件或数据库中,这样可以实现数据持久化的效果。

4、消息传递:XML格式可以被用于消息传递,如Java Message Service(JMS)中的消息格式。

5、数据交换:XML格式可以被用于在Java应用程序和其他应用程序之间进行数据交换,比如在不同平台之间传递数据。

总之,XML在Java中被广泛应用于数据交换、配置文件、持久化、消息传递等方面,它可以简化数据传递过程,提高程序的可读性和可维护性。
Java中的XML(eXtensible Markup Language)是一种用于表示数据的标记语言,它可以帮助 Java 应用程序处理和传输数据。以下是 Java中XML的一些作用:

  1. 数据交换:XML可以作为一种通用的数据格式,用于不同系统之间的数据交换。这使得 Java 应用程序可以轻松地与其他系统进行数据交换。

  2. 配置文件:XML可以作为Java应用程序中的配置文件,用于存储应用程序的配置参数和设置。这可以使应用程序的配置更加简单和灵活。

  3. 数据存储:XML可以作为Java应用程序中的数据库,用于存储和管理应用程序中的数据。XML数据库可以用于存储和查询大量的数据。

  4. 网络服务:XML可以作为Web服务协议的基础,用于实现不同应用程序之间的数据交换和通信。

综上所述,XML在Java中具有广泛的应用,可以帮助Java开发人员处理和管理数据,实现数据交换和通信等。

在Java中,XML是一种用于存储和传输数据的标记语言。它可以将数据以可读性高、易于解析、易于扩展的方式进行描述。XML被广泛应用于以下方面:

  1. 数据交换:XML广泛应用于数据交换,可以将数据从一个应用程序传输到另一个应用程序。

  2. 配置文件:XML也被用作配置文件,用于配置应用程序的参数和设置。

  3. 网络协议:XML还被用作网络协议,例如SOAP和Web服务中用到的XML协议。

  4. 数据库:XML也可以用于存储和检索数据,例如在NoSQL数据库中使用XML格式来存储数据。

Java提供了许多XML处理技术,例如DOM、SAX和StAX等API,以帮助开发人员读取、解析和生成XML文档。

相关推荐
不是二师兄的八戒21 分钟前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
爱编程的小生33 分钟前
Easyexcel(2-文件读取)
java·excel
带多刺的玫瑰1 小时前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
计算机毕设指导62 小时前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
Gu Gu Study2 小时前
枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
java·开发语言
Chris _data2 小时前
二叉树oj题解析
java·数据结构
牙牙7052 小时前
Centos7安装Jenkins脚本一键部署
java·servlet·jenkins
paopaokaka_luck2 小时前
[371]基于springboot的高校实习管理系统
java·spring boot·后端
以后不吃煲仔饭2 小时前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师2 小时前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言