【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目录下。

相关文章
|
19天前
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
|
27天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
29天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
29天前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
76 0
|
29天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
64 0
|
29天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
51 0
|
29天前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
58 0
|
29天前
|
安全 Java 程序员
Collection-Stack&Queue源码解析
Collection-Stack&Queue源码解析
74 0
|
10天前
|
消息中间件 缓存 安全
Future与FutureTask源码解析,接口阻塞问题及解决方案
【11月更文挑战第5天】在Java开发中,多线程编程是提高系统并发性能和资源利用率的重要手段。然而,多线程编程也带来了诸如线程安全、死锁、接口阻塞等一系列复杂问题。本文将深度剖析多线程优化技巧、Future与FutureTask的源码、接口阻塞问题及解决方案,并通过具体业务场景和Java代码示例进行实战演示。
29 3
|
27天前
|
存储
让星星⭐月亮告诉你,HashMap的put方法源码解析及其中两种会触发扩容的场景(足够详尽,有问题欢迎指正~)
`HashMap`的`put`方法通过调用`putVal`实现,主要涉及两个场景下的扩容操作:1. 初始化时,链表数组的初始容量设为16,阈值设为12;2. 当存储的元素个数超过阈值时,链表数组的容量和阈值均翻倍。`putVal`方法处理键值对的插入,包括链表和红黑树的转换,确保高效的数据存取。
51 5

推荐镜像

更多
下一篇
无影云桌面