博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XML解析器--参考mybatis技术内幕
阅读量:2219 次
发布时间:2019-05-08

本文共 2255 字,大约阅读时间需要 7 分钟。

      在 MyBatis 中涉及多个 XML 配置文件,因此我们首先介绍 XML 解析的相关内容 。 XML解析常见的方式有三种 , 分别是: DOM ( Document Object Model )解析方式和 SAX ( Simple APIfor XML )解析方式,以及从 JDK6.0 版本开始, JDK 开始支持的 StAX ( Streaming API for XML)解析方式。在开始介绍 MyBatis 的 XML 解析功能之前,先介绍这几种常见的 XML 处理方式 。

  •        DOM

        DOM 是基于树形结构的 XML 解析方式 ,它会将整个 XML 文档读入内存并构建一个 DOM树,基于这棵树形结构对各个节点( Node )进行操作 。 XML 文档中的每个成分都是一个节点:整个文档是一个文档节点 , 每个 X扣E 标签对应一个元素节点 ,包含在 X岛1L 标签中的文本是文本节点,每一个 XML 属性是一个属性节点,注释属于注释节点。现有一个 X扎在L 文档 (文件名是 inventory.xml )如下所示,在后面介绍 DOM 和 XPath 使用时,还会使用到该 XML 文件:

 

Snow Crash
Neal Stephenson
Spectra
0553380958 </工 sbn>
14 .95
Burning Tower
Larry Niven
Jerry Pournelle
Pocket
0743416910
S . 99
Zodiac
Neal Stephenson
Spectra
0553573862
7 .50
< !--more books ... -- >

经过 DOM 解析后得到的树形结构如图 :

     

 DOM 解析方式最主要的好处是易于编程,可以根据需求在树形结构的各节点之间导航 。 例如导航到当前节点的父节点、兄弟节点、子节点等都是比较方便的,这样就可以轻易地获取到自己需要的数据,也可以很容易地添加和修改树中的元素 。 因为要将整个 XML 文档加载到内存中井构造树形结构,当 XML 文档的数据量较大时,会造成较大的资源消耗 。

 

  • SAX

      SAX 是基于事件模型的 XML 解析方式,它并不需要将整个 XML 文档加载到内存中,而只需将 XML 文档的一部分加载到内存中,即可开始解析,在处理过程中井不会在内存中记录XML 中的数据,所以占用的资源比较小。当程序处理过程中满足条件时,也可以立即停止解析过程,这样就不必解析剩余的 XML 内容 。

       当 SAX 解析器解析到某类型节点时,会触发注册在该类型节点上的回调函数,开发人员可以根据自己感兴趣的事件注册相应的回调函数。 一般情况下,开发人员只需继承 SAX 提供的DefaultHandler 基类,重写相应事件的处理方法并进行注册即可 。 如图 2-3 所示,事件是由解析器产生并通过回调函数发送给应用程序的,这种模式我们也称为“推模式”。

        SAX 的缺点也非常明显,因为不存储 XML 文挡的结构,所以需要开发人员自己负 责维护业务逻辑涉及的多层节点之间的关系,例如,某节点与其父节点之间的父子关系、与其子节点之间的父子关系 。 当 XML 文档非常复杂时,维护节点间关系的复杂度较高,工作量也就会比较大 。 另一方面,因为是流式处理,所以处理过程只能从 XML 文档开始向后单向进行, 无法像 DOM 方式那样 , 自由导航到之前处理过的节点上重新处理,也无法支持 XPath 。 SAX 没有提供写 XML 文档的功能 。

       

  •       StAX

        JAXP 是 JDK 提供的一套用于解析 XML 的 API , 它很好地支持 DOM 和 SAX 解析方式,JAXP 是 JavaSE 的一部分,它由 javax.xml 、 org .w3c . dom 、 org.xml.sax 包及其子包组成。从 JDK6 . 0 开始, JAXP 开始支持另 一种 XML 解析方式,也就是下面要介绍的 S民X 解析方式 。

        StAX 解析方式与 SAX 解析方式类似,它也是把 XML 文档作为一个事件流进行处理,但不同之处在于 StAX 采用的是“拉模式”。 所谓唯模式”是应用程序通过调用解析器推进解析的进程,如图 2-4 所示 。 在 StAX 解析方式中,应用程序控制着整个解析过程的推进,可以简化应用处理 XML 文档的代码,并且决定何时停止解析,而且 StAX 可以同时处理多个 XML 文档。

          

       StAX 实际上包括两套处理 XML 文档的 API,分别提供了不同程度的抽象。 一种是基于指针的 API,这是一种低层 API,效率高但抽象程度较低 。 另一种 API 是基于迭代器的 API,它允许应用程序把 XML 文档作为一系列事件对象来处理,效率较略低但抽象程度较高 。

转载地址:http://gvdfb.baihongyu.com/

你可能感兴趣的文章
Bagging 简述
查看>>
详解 Stacking 的 python 实现
查看>>
简述极大似然估计
查看>>
用线性判别分析 LDA 降维
查看>>
用 Doc2Vec 得到文档/段落/句子的向量表达
查看>>
使聊天机器人具有个性
查看>>
使聊天机器人的对话更有营养
查看>>
一个 tflearn 情感分析小例子
查看>>
attention 机制入门
查看>>
手把手用 IntelliJ IDEA 和 SBT 创建 scala 项目
查看>>
GAN 的 keras 实现
查看>>
AI 在 marketing 上的应用
查看>>
Logistic regression 为什么用 sigmoid ?
查看>>
Logistic Regression 为什么用极大似然函数
查看>>
SVM 的核函数选择和调参
查看>>
LightGBM 如何调参
查看>>
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
查看>>
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>