具体解释XML解析(一)—解析接口浅析

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

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


解析器

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

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


基于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。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值