XML简介与Dom4j解析XML

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: XML简介与Dom4j解析XML

一.XML简介

首先我们先简单介绍一下什么是xml,如果对这方面已有所了解的小伙伴们可以跳过标题一。
比较着急的小伙伴可以直接看标题二中的2.Dom4j解析XML

1.什么是 XML

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。需要我们自行定义标签。
  • XML 被设计为具有自我描述性
  • XML 是 W3C 的推荐标准

2.XML 的主要作用

  • 用来保存数据,而且这些数据具有自我描述性
  • 它还可以做为项目或者模块的配置文件
  • 还可以做为网络传输数据的格式(现在 JSON 为主)。

3.XML 与 HTML

  • XML 不是 HTML 的替代。
  • XML 和 HTML 为不同的目的而设计:
    XML 被设计为传输和存储数据,其焦点是数据的内容。
    HTML 被设计用来显示数据,其焦点是数据的外观。
  • HTML 旨在显示信息,而 XML 旨在传输信息。
  • XML 标签对大小写敏感而HTML标签对大小写不敏感,浏览器在解析HTML标签时会自动把其标签名转化为小写。

4.XML 属性

xml 的标签属性和 html 的标签属性是非常类似的,属性可以提供元素的额外信息
标签上可以书写属性: 一个标签上可以书写多个属性。每个属性的值必须使用 引号 引起来。

5.XML语法规则

  • 所有 XML 元素都须有关闭标签(也就是闭合)
  • XML 标签对大小写敏感
  • XML 必须正确地嵌套
  • XML 文档必须有根元素
    根元素就是顶级元素, 没有父标签的元素,叫顶级元素。
    根元素是没有父标签的顶级元素,而且是唯一一个才行。
  • XML 的属性值须加引号
  • XML 中的特殊字符
符号 XML中表示方法 意义
< < 小于
> > 大于
& & 和号
' 单引号
" " 引号
  • 文本区域(CDATA 区)
    CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析
    CDATA 格式:<![CDATA[ 这里可以把你输入的字符原样显示,不会解析 xml ]]>
    示例:
<?xml version="1.0" encoding="UTF-8"?>
<!-- xml 声明 version 是版本的意思 encoding 是编码 -->
<students>
    <student id="001">
        <name>Mr.Yu</name>
        <age>21</age>
        <gender><![CDATA[<男>]]></gender>
    </student>

    <student id="002">
        <name>小明</name>
        <age>20</age>
        <gender><![CDATA[<男>]]></gender>
    </student>
</students>

二.Dom4j解析XML

1.树结构与xml文件的解析技术

1.1树结构

不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的 dom 技术来解析。
在这里插入图片描述
上图树结构对应的XML文件:

<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title> 
  <author>Giada De Laurentiis</author> 
  <year>2005</year> 
  <price>30.00</price> 
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title lang="en">Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore>

document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档)。

1.2xml文件的解析技术

早期 JDK 为我们提供了两种 xml 解析技术 DOM 和 SAX (已经过时,但我们需要知道这两种技术)dom 解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。 Java 对 dom 技术解析标记也做了实现。sun 公司在 JDK5 版本对 dom 解析技术进行升级:SAX( Simple API for XML ) SAX 解析,它跟 W3C 制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。 它是一行一行的读取 xml 文件进行解析的。不会创建大量的 dom 对象。所以它在解析 xml 的时候,在内存的使用上。和性能上。都优于 Dom 解析。第三方的解析: jdom 在 dom 基础上进行了封装 。dom4j 又对 jdom 进行了封装。pull 主要用在 Android 手机开发,是在跟 SAX非常类似都是事件机制解析 xml 文件。

2.Dom4j解析XML

通过上述xml文件的解析技术的讲解,我们知道了Dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析 xml 文件。由于 dom4j 它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用 dom4j 就需要到 dom4j 官网下载 dom4j的jar包。本人在csdn上上传了该文件的资源,大家也可以直接下载,下载地址:https://download.csdn.net/download/MrYushiwen/14934949

解压好下载的文件后,我们对文件目录做个简单介绍:

在这里插入图片描述

docs 是文档目录,是第三方类库提供的学习文档。lib 目录,里面装的是dom4j需要依赖的其他第三方类库。src 目录是dom4j的源码目录

我们现在需要用到dom4j-1.6.1.jar,把该jar包导入到工程中。
导入jar包后,我们用Dom4j解析XML需要以下几个步骤:

要创建一个 Document 对象,需要我们先创建一个 SAXReader 对象通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象通过 Document 对象。拿到 XML 的根元素对象通过根元素对象。获取所有的 book 标签对象,Element.elements(标签名)它可以拿到当前元素下的指定的子元素的集合遍历每个 student 标签对象。然后获取到 student 标签对象内的每一个元素。

具体代码如下:

public class TestMain {
      
    public static void main(String[] args) {
      
        try {
      
            parseXml();
        } catch (DocumentException e) {
      
            e.printStackTrace();
        }
    }

    public static void parseXml() throws DocumentException {
      
        // 要创建一个 Document 对象,需要我们先创建一个 SAXReader 对象
        SAXReader reader = new SAXReader();
        // 通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
        Document document= reader.read("05_xml/xml/students.xml");
        //通过 Document 对象。拿到 XML 的根元素对象
        Element root = document.getRootElement();
        //通过根元素对象。获取所有的 book 标签对象,Element.elements(标签名)它可以拿到当前元素下的指定的子元素的集合
        List<Element> students = root.elements("student");
        //遍历每个 student 标签对象。然后获取到 student 标签对象内的每一个元素。
        for (Element student : students) {
      
            //获取student的id属性
            String id = student.attributeValue("id");
            //拿到 student 下面的 name 元素对象
            Element nameElement = student.element("name");
            //拿到 student 下面的 age 元素对象
            Element ageElement = student.element("age");
            //拿到 student 下面的 gender 元素对象
            Element genderElement = student.element("gender");
            //再通过 getText() 方法拿到起始标签和结束标签之间的文本内容
            System.out.println("学号:"+id);
            System.out.println("姓名:"+nameElement.getText());
            System.out.println("年龄:"+ageElement.getText());
            System.out.println("性别:"+genderElement.getText());
            System.out.println("*****************************");
        }
    }
}

解析的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!-- xml 声明 version 是版本的意思 encoding 是编码 -->
<students>
    <student id="001">
        <name>Mr.Yu</name>
        <age>21</age>
        <gender><![CDATA[<男>]]></gender>
    </student>

    <student id="002">
        <name>小明</name>
        <age>20</age>
        <gender><![CDATA[<男>]]></gender>
    </student>
</students>


解析输出结果:
在这里插入图片描述

目录
相关文章
|
6天前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
51 23
|
3天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
7天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
5天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
1天前
|
XML Web App开发 JavaScript
|
18天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
1月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
53 6
|
3天前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
3天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
|
7天前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析

推荐镜像

更多