在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. hadoop(八) - hbase集群环境搭建

    1. 上传hbase安装包hbase-0.96.2-hadoop2-bin.tar.gz 2. 解压 tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz -C /clo ...

  2. C#趣味程序---三色球问题

    问题:若一个口袋中放有12个球,3红3白和6黑,问从袋中随意取8个球,有多少种不同的颜色搭配? using System; namespace ConsoleApplication1 { class ...

  3. ubuntu16.04安装配置mysql数据库,分割视频为帧图像

    参考http://wiki.ubuntu.org.cn/MySQL%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97 版本为5.7 一.安装 安装命令sudo apt-get i ...

  4. 使用CNN做文本分类——将图像2维卷积换成1维

    使用CNN做文本分类 from __future__ import division, print_function, absolute_import import tensorflow as tf ...

  5. v-cli环境的安装

    第一步:node   npm是node的包管理器  yarn 第二步:npm install -g vue-cli或者淘宝镜像                  如果安装失败:在node.js com ...

  6. springMVC+uploadify3.1 文件上传 demo

    uploadify3.1 api 可参考:(点击打开链接) 需要springmvc的jar包 1.upload.jsp(主要代码) <script type="text/javascr ...

  7. nginx报错日志:see security.limit_extensions

    访问出现部分.js.css等部分文件被拒绝错误日志如下: 19:20:13 [error] 1181#0: *287 FastCGI sent in stderr: "Access to t ...

  8. SQL Server 汉字转拼音字母

    /* 汉字转拼音首字母 */ create function fun_getPY(@str nvarchar(4000)) returns nvarchar(4000) as begin declar ...

  9. Centos7 minimal 系列之Nginx搭建(三)

    一.安装nginx 1.1.安装依赖包 yum -y install gcc-c++ yum -y install pcre pcre-devel yum -y install zlib zlib-d ...

  10. java中常用的转义字符

    Day02_SHJavaTraing_4-3-2017 Java中允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量. 一.JAVA中常用的转义字符