【JavaWeb】XML的理解与Dom4j解析技术的使用(上)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 1 xml简介2 xml入门2.1 xml示例文件2.2 xml语法介绍2.2.1 xml注释2.2.2 元素(标签)2.2.3 xml的属性2.2.4 xml语法规范2.2.5 文本区域(CDARA)2.3 xml解析技术3 Dom4j 解析技术3.1 Dom4j 类库的下载与简介3.2 dom4j编程一般步骤3.3 案例:使用dom4j读取xml文件得到Document对象

1 xml简介

xml是一种可扩展的标记性语言。其主要作用如下:


用以保护数据,且这些数据具有自我描述性;

可以作为项目或者模块的配置文件;

可以作为网络传输数据的格式(现在以JSON为主)

2 xml入门

2.1 xml示例文件

尝试创建一个xml文件来描述学生信息。


创建一个xml文件 students.xml


students.xml

<?xml version="1.0" encoding="utf-8" ?>
<!--
    <?xml version="1.0" encoding="utf-8" ?>
    以上内容就是xml文件的声明
    version表示xml的版本
    encoding表示xml文件本身的编码
-->
<students><!--students 表示多个学生信息-->
    <student sno="20408010101"><!--student表示一个学生信息 sno表示学号-->
        <name>路飞</name><!--name表示姓名-->
        <age>17</age><!--age表示年龄-->
    </student>
    <student sno="20408010102"><!--student表示一个学生信息 sno表示学号-->
        <name>娜美</name><!--name表示姓名-->
        <age>16</age><!--age表示年龄-->
    </student>
</students>

2.2 xml语法介绍

2.2.1 xml注释

xml的注释与html文件的注释格式一样:


<!-- 这里是注释 -->

2.2.2 元素(标签)

在html中,我们学习过,html标签分为单标签和双标签,且标签名对大小写不敏感。当然,标签也具有一些属性,分为基本属性和事件属性。


那么,什么是xml元素呢?

XML元素是指从(且包括)开始标签直到(且包括)结束标签的部分。

元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。



在上图的例子中, 和  都拥有元素内容,它们都包含了其他元素。而像  和  只包含文本,因此,只有文本内容。


xml 元素遵循以下命名规则:


名称可以包含字母、数字和其他字符;

名称不能以数字或标点符号开始;

名称不能包含空格。

在xml中的元素,也分为单标签和双标签,格式与 html 一致。


2.2.3 xml的属性

xml的标签属性与html的标签属性是非常类似的,属性可以提供元素的额外信息。


一个标签上可以书写多个属性。每个属性的值需要用引号引住。 属性名的命名规范与标签的规则一致。


2.2.4 xml语法规范

所有 XML 元素都必须有关闭标签。不闭合就会报错。

XML 标签 对大小写敏感。

XML 文档必须有根元素,根元素即没有父标签的元素,且是唯一一个。

XML 中的特殊字符可以使用 html语法中的,如空格等。

2.2.5 文本区域(CDARA)

xml中提供了一个CDATA语法,可以告诉xml解析器,位于CDATA里的文本内容,只是纯文本,不需要xml语法解析!


CDATA格式:


<![CDATA[这里可以把你输入的字符原样显示,不会解析!]]>

2.3 xml解析技术

不论是html文件还是xml文件都是标记型文档,都可以使用w3c组织制定的dom技术来解析。



XML 文档对象模型定义访问和操作 XML文档 的标准方法;

DOM 将 XML 文档作为一个树形结构,而树叶被定义为节点。

早期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 文件。

Dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析 xml 文件。


3 Dom4j 解析技术

3.1 Dom4j 类库的下载与简介

由于 dom4j 不是 sun公司 的技术,属于第三方公司的技术,因此,想要使用就必须下载 dom4j的jar包。


dom4j的官网是http://www.dom4j.org,截至到目前最新的版本是1.6.1。dom4j是一个易用的、开源的库,应用于Java平台XML、XPath、和XSLT,并且提供了对DOM、SAX和JAXP的完全支持。主要功能包括针对Java平台设计完成支持Java的集合框架;完全的支持JAXP, TrAX, SAX, DOM, and XSLT;为XML文档的简单导航完全集成的XPath支持;基于事件的过程模式完全支持大量的文档或者是XML流;基于Java接口,更加灵活容易扩展和实现;支持XML Schema数据类型支持使用Kohsuke更加优于多模式验证器库。


下载压缩包,并解压,取得jar包。 下载地址:https://dom4j.github.io/



Dom4j目录简介:


docs是文档目录,点开后,打开index.html,可以查看参考手册。


lib目录存储了dom4j需要的第三方jar包。


src目录下是dom4j的源码和一些测试与样例。

3.2 dom4j编程一般步骤

先加载xml文件创建Document对象;

通过Document对象拿到根元素对象;

通过根元素.element(标签名); 可以返回一个集合,集合中存储了所有指定标签名的元素;

找到想要修改、删除的子元素,进行相应的操作;

保存在硬盘上。

3.3 案例:使用dom4j读取xml文件得到Document对象

需要解析的students.xml文件的内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<students>
    <student sno="20408010101">
        <name>路飞</name>
        <age>17</age>
    </student>
    <student sno="20408010102">
        <name>娜美</name>
        <age>16</age>
    </student>
</students>

解析过程如下:

1️⃣ 首先,将需要解析的xml文件存储到项目的src目录下。

相关文章
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
3天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
6天前
|
XML 数据格式 Python
python 解析xml遇到xml.etree.ElementTree.ParseError: not well-formed (invalid token): |4-8
python 解析xml遇到xml.etree.ElementTree.ParseError: not well-formed (invalid token): |4-8
|
5天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
7天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
2月前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
2月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
56 6
|
19天前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
23天前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析
|
19天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
174 37

推荐镜像

更多
下一篇
无影云桌面