添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Java Web开发实战—XML—XML解析


上一篇已经跟大家介绍了Java Web开发实战—XML—初识XML、XML语法规范( Java Web开发实战—XML—初识XML、XML语法规范 )这篇我们接着来说 XML解析以及案例。

XML解析

当数据被存储在XML文档中以后,若想操作这些数据,就必须先解析XML文档。由于XML文档是结构化文档,如果仍然使用普通文件IO进行读写,不仅效率低下,过程也非常复杂。为了避免这些问题,在实际开发中常采用DOM、SAX、DOM4J等方法对XML文档进行解析。

DOM解析简介

DOM是Document Object Model(文档对象模型)的简称,它是W3C组织推荐的处理XML的一种标准方式。

DOM以树状结构组织XML文档中的每个元素,这个树状结构允许开发人员在树中寻找特定信息。在解析XML文档时,内存中会生成与XML文档结构对应的DOM对象树。这样便能够根据树的结构,以节点形式来对文档进行操作,如图4.4所示。

图4.4 DOM方式解析XML文档

图4.4描述了用DOM方式解析XML文档的过程,XML解析器负责读入文档,将该文档转成常驻内存的树状结构,然后程序代码就可以使用节点与节点之间的父子关系来访问DOM树,并获取每个节点所包含的数据。

DOM解析实例

Java提供了相应的API封装对XML解析的操作,下面以一个实例演示以DOM方式解析XML文档。打开Eclipse,新建Java工程chapter04,在工程chapter04下新建目录lib,将dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar复制到lib目录下,鼠标右击lib目录下的上述jar包,在弹出的菜单中选择Build Path→Add to Build Path,完成jar包的导入。在工程chapter04的src目录下新建book02.xml,如例4.3所示。

接着,新建测试类TestDOM,用于解析book02.xml文档,如例4.4所示。

SAX解析简介

与DOM不同, SAX 采用事件机制来解析XML文档,它基于事件驱动,是一种快速读取XML的方式。

通过SAX方式解析XML文档,涉及两个部分:解析器和事件处理器。在处理XML文档时,解析器遇到文档开始、元素开始、文本、元素结束和文档结束时会触发对应的事件,这些事件中封装了XML元素。事件处理器是用来监听并处理解析器触发的事件的,从事件处理器中可以获得解析器封装的文档内容,通过SAX方式解析XML文档的过程如图4.5所示。

图4.5 SAX方式解析XML文档

图4.5描述了用SAX方式解析XML文档的过程,SAX解析器对文档进行解析时,会触发一系列事件,这些事件将被SAX事件处理器监听。开发者要在SAX事件处理器中定义处理事件的方法,当监听到事件时,相应的方法将被调用。

SAX解析实例

为了让大家理解得更加深刻,下面通过一个实例来演示SAX方式解析book02.xml文档。新建一个类MyHandler,该类即为事件处理器,需要继承SAX提供的DefaultHandler类并重写其中的方法,如例4.5所示。

接下来,新建一个类TestSAX,该类用于测试通过SAX解析XML文档,如例4.6所示。

DOM与SAX的对比

DOM通过把XML文档转化成DOM树进行解析,SAX采用事件机制对XML文档进行解析,作为XML解析的重要方式,它们之间存在很大的区别,具体如表4.3所示。

表4.3 XML与HTML对比

对比项 DOM SAX
解析机制 DOM模型 触发事件
资源占用 一次性将整个XML文档读入内存并转化成DOM树,解析速度慢,占用资源大 按顺序逐行解析,无须将XML文档一次性全部装入,速度快,占用内存资源较少
访问与修改 即可读取元素内容,也可修改元素内容,整个解析过程DOM树常驻内存,支持重复访问 只能访问元素内容,不支持修改元素内容,不保存已访问内容,想要重复访问,只能再次解析
应用场景 1.需要对XML文档进行修改 2.需要随机对XML文档进行访问 1.对大型XML文档进行处理 2.只需要XML文档的部分内容,或者只需要从XML文档中得到特定信息 3.开发者想自定义对象模型

DOM4J简介

DOM4J是一个由 dom4j.org 出品的开源XML解析包,从表面看,它类似于前面讲过的DOM机制,但实质上,DOM4J的处理方式比DOM机制更简单一些。

DOM4J采用面向接口的方式处理XML文档,它对底层原始的多种XML解析器进行了高度封装,完全支持DOM、SAX等机制,在很大程度上简化了XML的解析方式。

DOM4J的最大特色是其提供的接口,在使用DOM4J进行XML解析时,开发者只需调用接口实现相关功能,无需关注接口的底层实现。关于DOM4J的常用接口,具体如表4.4所示。

表4.4 DOM4J的常用接口

接口名称 功能描述
interface org.dom4j.Node 它是DOM4J树中所有元素的根接口
interface org.dom4j.Attribute 定义了XML元素的属性
interface org.dom4j.Branch 指能够包含子节点的节点,子接口是Element和Docuemnt
interface org.dom4j.CDATA 定义了XML CDATA区域
interface org.dom4j.CharacterData 是一个标识接口,标识基于字符的节点,是所有文本元素的父接口。
interface org.dom4j.Comment 定义了 XML的注释内容
interface org.dom4j.Document 定义了XML文档
interface org.dom4j.DocumentType 定义 XML DOCTYPE声明
interface org.dom4j.Element 定义XML元素
interface org.dom4j.ElementHandler 定义了Element 对象的处理器
interface org.dom4j.ElementPath 被 ElementHandler使用,用于取得当前正在处理的路径层次信息
interface org.dom4j.Entity 定义 XMLentity
interface org.dom4j.NodeFilter 定义了在DOM4J节点中产生的一个滤镜或谓词的行为(predicate)
interface org.dom4j.Text 定义 XML 文本内容
interface org.dom4j.Visitor 用于实现 Visitor模式
interface org.dom4j.XPath 在分析一个字符串后会提供一个 XPath 表达式

DOM4J解析实例

前面已经提到,使用DOM4J解析XML文档是相对简单的,下面通过一个实例来演示解析过程。新建一个测试类TestDOM4J,该类用于测试通过DOM4J解析book02.xml文档,具体代码如例4.7所示。

XPath解析简介

Xpath的全称是XML Path Language(XML路径语言),是一门在 XML 文档中查找信息的语言。XPath的功能有些类似于SQL,发送SQL命令可以从数据库中获得需要的数据,同样,通过给出XPath路径信息则可以从XML文档中查找出符合条件的元素。

Xpath是W3C XSLT 标准的主要因素,应用非常广泛,本书主要针对在DOM4J中使用xPath技术进行讲解。

要使用XPath获取 XML文档中的节点或节点集,首先要理解路径表达式的概念。XPath的路径表达式是有一定语法要求的,XPath中常用的特殊字符,具体如表4.5所示。

表4.5 Xpath中常用的特殊字符

常用字符 功能描述
nodename 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性


为了让大家理解表4.5中特殊字符的用法,下面给出一些常用的路径表达式实例,具体如表4.6所示。

表4.6 Xpath的路径表达式实例


表达式实例 说明
booklist 选取booklist的所有子节点
/ booklist 选取根节点booklist
booklist/ computerbooks 选取属于 booklist的子元素的所有computebooks元素。
// computerbooks 选取所有computerbooks子元素,而不管它们在文档中的位置。
booklist// computerbooks 选择属于booklist元素的后代的所有computerbooks元素,而不管它们位于booklist 之下的什么位置。
//@lang 选取名为 lang 的所有属性

XPath解析实例

学习了Xpath路径表达式的概念后,通过一个实例来演示在DOM4J中使用Xpath技术。

小结:Java Web开发实战—XML— 初识XML、XML语法规范、XML解析

讲解了XML的相关知识,包括XML的基本介绍、XML的语法规范、XML解析等,通过学习,大家要能够根据语法规范编写XML,可以使用Java程序对XML进行解析和处理。

发布于 2022-11-03 15:33 ・IP 属地北京