在DRP项目中接触到了一个XML解析工具DOM4J,它作为解析工具的据说性能很优秀。可是刚刚接触解析工具不久,而且也没有使用过其它的解析工具。因此对于DOM4J的性能没有直接的感受(没有參照物)。只是,本篇博客先临时不直接讲DOM4J。

之前说过,对于工具特别是优秀的工具,我们要学习的不仅仅是使用而已,而须要更深层次的学习。好了,開始吧,首先我们要先了解一下解析器。

解析器

解析器的作用就是将XML文档转换为应用程序可操作的对象。即读入一个XML文档并分析其结构。然后,应用程序通过解析接口訪问或者操作XML文档。

以下以DOM为例,了解一下解析器和解析接口在应用中的位置。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1b2ppYWppbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

基于DOM(Document Object  Model)

DOM之前的博客有过介绍了,即文档对象模型。

XML转换是通过解析器完毕的,之后我们才干对XML文档进行读取操作。使用DOM操作XML文档主要须要通过下面几种操作:载入XML文档→遍历XML文档→操作控制XML文档节点(增、删、改)。

DOM基本接口:

Document:是对文档进行操作的接口,同一时候该节点是DOM对象树的根节点。提供了对文档中的数据进行訪问和操作的入口。另外。元素、节点、凝视、处理指令都无法脱离文档的上下文关系而独立存在。

所以在Document接口还提供了创建其它节点对象的方法。

    Node:代表DOM树中的一个节点。Node 接口在整个DOM树中具有举足轻重的地位,DOM接口中有非常大一部分接口是从Node接口继承过来的,比如,Element、Attr、 CDATASection等接口,都是从Node继承过来的。          

    NodeList:提供了对节点集合的抽象定义。它并不包括怎样实现这个节点集的定义。

NodeList用于表示有顺序关系的一组节点,比方某个节点的子节点序列。在 DOM中。NodeList的对象是"live"的,换句话说,对文档的改变,会直接反映到相关的NodeList对象中。比如,假设通过DOM获得一个 NodeList对象,该对象中包括了某个Element节点的全部子节点的集合,那么,当再通过DOM对Element节点进行操作(加入、删除、修改 节点中的子节点)时,这些改变将会自己主动地反映到NodeList对象中,而不需DOM应用程序再做其它额外的操作。

NamedNodeMap:表示能够通过名字来訪问的一组节点集合。

DOM接口优缺点分析

首先我们要了解DOM是要在内存中建立文档树。这是它的特点的决定性因素。

由于。树在内存中的存在是持久的。所以。这就保证了DOM接口随机訪问的特点。同一时候,也是由于树在内存中的存在。因此对于大型的XML文档的解析会耗费内存。而接下来介绍的SAX接口则与DOM接口全然相反。

基于SAX(Simple API for XML)

相对与SAX是一种轻量型的方法。它针对的就是DOM接口处理大文档时比較费时、费力、非资源的问题。

它是一种替代。

SAX接口依序读入文件并产生对应的事件。

  主要接口:

SAXParserFactory:用来依照系统属性中定义的创建一个分析器实例。

Parser:定义了类似setDocumentHandler的方法来创建事件处理函数。

  DocumentHandler :当分析器遇到XML文档中的标记时激活该接口中的startDocument,endDocument。startElement,endElement等方法。

    ErrorHandler:当分析器遇到不用的错误时。就会激活error、fatalError等方法。

DTDHandler:处理DTD中定义时,调用该接口中的方法。

优缺点分析

这样的处理的长处很类似于流媒体的长处。分析可以马上開始,而不是等待全部的数据被处理。

并且,因为应用程序仅仅是在读取数据时检查数据, 因此不需 要将数据存储在内存中。这对于大型文档来说是个巨大的长处。其实。应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 比 DOM 快很多。

    还有一方面,因为应用程序没有以不论什么方式存储数据,使用 SAX 来更改数据或在数据流中往后移是不可能的。

基于JDOM(Java Document Object Model)

这样的接口类似于DOM接口因此不再复述。

总的来说,对于XML的訪问和操作要通过接口来实现,而解析器则实现接口。这也就是上面图所表达的意思。另外关于选择使用哪个接口来訪问XML数据,这还是依据各个接口的特点自己选择。而且,博客里介绍的两种接口特点还是比較鲜明的,因此适用的环境应该也比較清晰。对解析接口应该有所了解了。下篇介绍DOM4J。

具体解释XML解析(一)—解析接口浅析的更多相关文章

  1. [转] Spring4.3.x 浅析xml配置的解析过程(6)——解析context命名空间之property-placeholder和property-override标签

    在上一篇解析自定义命名空间的标签中,我们已经知道解析自定义命名空间的标签需要用到NamespaceHandler接口的实现类,并且知道spring是如何获取命名空间对应的命名空间处理器对象的.因此我们 ...

  2. Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析

    转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PAREN ...

  3. WebService如何封装XML请求 以及解析接口返回的XML

    原 WebService如何封装XML请求 以及解析接口返回的XML 置顶 2019年08月16日 15:00:47 童子泛舟 阅读数 28 标签: XML解析WebService第三方API 更多 ...

  4. Android基础总结(12)——XML和JSON解析

    XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...

  5. Android XML文档解析(一)——SAX解析

    ---------------------------------------------------------------------------------------------------- ...

  6. 【文件处理】xml 文件 DOM解析

    一.Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath 此文针对其中的DOM方法具体展开介绍及代码分析 sax.dom是两种对xml文档进行解析的方法(没有具体实 ...

  7. Android解析XML之SAX解析器

    SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件 ...

  8. xml之dom4j解析

    * 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要 ...

  9. xml语法、DTD约束xml、Schema约束xml、DOM解析xml

    今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...

随机推荐

  1. 折腾开源WRT的AC无线路由之路-5

    -在Mac上设置无password连接SSH 1. 生成SSH密钥对 <pre name="code" class="html">ssh-keyge ...

  2. 具体验证身份证号码规则和姓名(汉字)的java代码

    一.验证汉字的正則表達式  /** 是否是汉字的正则 */  private String regexIsHanZi = "[\\u4e00-\\u9fa5]+";   * @pa ...

  3. 原来C++之父在大摩工作呀,并且还是总经理。。

    摩根士丹利信息技术部门简历接收即将截止.请同学们抓紧投递 摩根士丹利9月.10月将在中国各大高校举办包含技术讲座.信息分享会以及校园宣讲会在 内的一系列校园活动.同学们将有机会和摩根士丹利高管以及返校 ...

  4. Android学习之——优化篇(1)

    一.优化的品质 1.简练.2.可读性强.3.模块化:4.层次性:5.设计良好.6.高效.7.优雅:8.清晰. 二.常见的编程规范     1. 基本要求 · 结构清晰,简单易懂.单个函数不超过100行 ...

  5. 4.vim操作

    你想以最快的速度学习人类史上最好的文本编辑器VIM吗?你先得懂得如何在VIM幸存下来,然后一点一点地学习各种戏法. 我建议下面这四个步骤: 存活 感觉良好 觉得更好,更强,更快 使用VIM的超能力 当 ...

  6. Python学习——BeautifulSoup篇

    BeautifulSoup     Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beau ...

  7. HDU 1047 Integer Inquiry( 高精度加法水 )

    链接:传送门 思路:高精度水题 /************************************************************************* > File ...

  8. sudo日志审计

    一般企业生产环境都会用跳板机把操作日志记录下来,不过有些公司内部的测试机可以用本机的sudo日志审计功能将执行的sudo命令保存日志. 为什么要使用sudo审计,因为可以通过sudo授权给普通用户执行 ...

  9. nmcli

    [root@web01 ~]# nmcli device status DEVICE TYPE STATE CONNECTION eth0 ethernet connected eth0 lo loo ...

  10. php读写excel —— PhpSpreadsheet组件

    前言 PhpSpreadsheet是一个纯PHP类库,它提供了一组类,允许您从不同的电子表格文件格式(如Excel和LibreOffice Calc)读取和写入.用PHP读取Excel.CSV文件 还 ...