`

SAX和DOM解析XML区别

    博客分类:
  • xml
 
阅读更多
本文转载自:http://blog.csdn.net/zhangxinrun/article/details/5678118
还有一篇文章总结的也不错:http://www.kaifajie.cn/kecheng/java/7625.html借鉴一下,学习学习


当你需要处理XML文档时,你的首要选择是使用DOM(文档对象模型)还是使用SAX(用于XML的简单API),即当前使用的两个主要的XML API。你可以使用任何一种(或者在同一时间使用两种)来处理XML文档,然而DOM将文档载入到内存中处理,而SAX则相反,它可以检测一个即将到来的 XML流,由此并不需要所有的XML代码同时载入到内存中。
选择DOM与SAX,与在一个数据库中的表单与视图之前选择一样:选择适合于当前实际情况的方法。如果你只是想简单地查看XML文档而不处理它,那么请选择使用SAX。


          SAX与DOM之间的区别


SAX与DOM之间有一些显著区别,包括:
DOM是复杂对象处理的首选,比如当XML比较复杂的时候,或者当你需要随机处理文档中数据的时候。SAX从文档的开始通过每一节点移动,以定位一个特定的节点。
DOM为载入到内存的文档节点建立类型描述。最终,这些描述呈现了可容易横向移动、潜在巨大、树型结构。如果XML很冗长,DOM就会显示出无法控制的胀 大。例如,一个300KB的XML文档可以导致RAM或者虚拟内存中的3,000,000KB的DOM树型结构。通过比较就会发现,一个SAX文档根本就 没有被解构,它也没有隐藏在内存空间中(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。SAX就是一种“更轻巧的”技术──它可以给你的系统 带来更轻的负担。SAX相当于观看一场马拉松比赛,而DOM就好比邀请所有的比赛选手到家里参加晚餐。
所以,你如何选择SAX和DOM?如果你处理复杂的东西,比如高级XSLT转换,或者Xpath过滤,请选择使用DOM。如果你建立或者更改XML文档,你也可以选择DOM。
相反,你可以使用SAX来查询或者阅读XML文档。SAX可以快速扫描一个大型的XML文档,当它找到查询标准时就会立即停止,然后再处理之。
在某些情况下,在一个方案中,最佳的选择是使用DOM和SAX处理不同的部分。例如,你可以使用DOM将XML载入到内存并改变它,然后通过从DOM树中发送一个SAX流而转移最后的结果。


SAX概念
SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准,可以说是“民间”的事实标准。实际上,它是一种社区性质的讨论产物。虽然如此,在XML中对SAX的应用丝毫不比DOM少,几乎所有的XML解析器都会支持它。

与DOM比较而言,SAX是一种轻量型的方法。我们知道,在处理DOM的时候,我们需要读入整个的XML文档,然后在内存中创建DOM树,生成 DOM树上的每个Node对象。当文档比较小的时候,这不会造成什么问题,但是一旦文档大起来,处理DOM就会变得相当费时费力。特别是其对于内存的需 求,也将是成倍的增长,以至于在某些应用中使用DOM是一件很不划算的事(比如在applet中)。这时候,一个较好的替代解决方法就是SAX。

SAX在概念上与DOM完全不同。首先,不同于DOM的文档驱动,它是事件驱动的,也就是说,它并不需要读入整个文档,而文档的读入过程也就是 SAX的解析过程。所谓事件驱动,是指一种基于回调(callback)机制的程序运行方法。(如果你对Java新的代理事件模型比较清楚的话,就会很容 易理解这种机制了)

在XMLReader接受XML文档,在读入XML文档的过程中就进行解析,也就是说读入文档的过程和解析的过程是同时进行的,这和DOM区别很 大。解析开始之前,需要向XMLReader注册一个ContentHandler,也就是相当于一个事件监听器,在ContentHandler中定义 了很多方法,比如startDocument(),它定制了当在解析过程中,遇到文档开始时应该处理的事情。当XMLReader读到合适的内容,就会抛 出相应的事件,并把这个事件的处理权代理给ContentHandler,调用其相应的方法进行响应
分享到:
评论

相关推荐

    dom解析和sax解析

    - 编程复杂度:DOM解析提供了直接访问和操作XML的简单接口,而SAX解析则需要编写事件处理器代码。 综上所述,DOM和SAX解析各有优劣,适用于不同的场景。在实际开发中,应根据项目需求和资源限制来选择合适的解析...

    XML_DOM_SAX.rar_ XML_DOM_SAX_c# sax_dom解析xml_xml parser csharp_x

    使用DOM解析XML时,首先创建一个`XmlDocument`对象,然后调用`Load`方法加载XML文件,接着可以通过`SelectNodes`或`SelectSingleNode`等方法查询XML节点。例如: ```csharp using System.Xml; XmlDocument doc = ...

    sax,dom解析xml和生产xml文件

    以下是DOM解析XML的基本流程: 1. 加载`DocumentBuilderFactory`,并设置解析器特性。 2. 使用`DocumentBuilderFactory`创建`DocumentBuilder`实例。 3. 调用`DocumentBuilder`的`parse()`方法解析XML文件,得到`...

    简单的sax和dom解析xml实例

    - 调用解析器的`parse()`方法解析XML文件,传入输入流和之前创建的解析器实现类。 2. Android中的SAX解析示例: ```java import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; ...

    SAX解析XML文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析...当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例

    解析XML的dom、sax和dom4j的jar包

    使用DOM解析XML需要的jar包通常包含在Java的标准库中,无需额外引入。 2. SAX (Simple API for XML) SAX是一种事件驱动的解析器,它不会一次性加载整个XML文档,而是逐行读取并触发相应的事件。这种方式对内存占用...

    Java使用sax、dom、dom4j解析xml文档

    Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...

    SAX,PULL,DOM解析XML

    XML(eXtensible Markup ...总的来说,SAX和PULL解析适用于处理大型XML文件,节省内存,而DOM解析则提供了一种更直观的方式处理XML,但需要更多内存。根据具体的应用场景和需求,开发者可以选择合适的XML解析方法。

    dom4j下sax解析xml

    在dom4j库中,SAX解析器实现了SAX2接口,提供了一种高效且节省内存的方式解析XML。以下是使用dom4j进行SAX解析的基本步骤: 1. **引入依赖**:在项目中添加dom4j库,通常通过Maven或Gradle构建工具添加对应的依赖。...

    XML的两种解析sax和dom

    在提供的压缩包中,`sax.rar`可能包含了使用SAX解析XML的示例代码,而`dom.rar`可能包含DOM解析的示例。学习这些代码可以帮助理解两种解析方式的具体实现和使用方法。对于开发者来说,理解和掌握SAX与DOM的差异和...

    java dom 解析 xml 实例

    Java 中有多种方法可以解析 XML 文档,其中最常用的两种方法是使用基于事件的 XML 简单 API(Simple API for XML,SAX)和基于树和节点的文档对象模型(Document Object Model,DOM)。Sun 公司提供了 Java API for ...

    DOM4J_SAX_DOM_XML的实例

    关于这些技术的实例,压缩包中的"XML"文件可能是用来演示如何使用DOM4J、SAX和DOM解析XML文档的代码示例。通过阅读和理解这些代码,你可以学习如何创建XML文档、解析XML元素、处理属性、遍历XML节点以及使用XPath...

    Android Dom解析XML

    总结来说,Android中使用DOM解析XML是一种常见且直观的方式,适合处理小规模的数据。结合ButterKnife库,可以方便地将解析结果与UI组件进行绑定,提高代码的可读性和维护性。但请注意,对于大文件,考虑使用SAX或者...

    Dom,Sax,Xpath解析XML实例

    以上就是DOM、SAX和XPath解析XML的基本知识和实例应用。通过这些技术,开发者可以根据实际需求选择最适合的方式来处理XML文档。在实际项目中,这三种解析方法都有其适用场景,理解它们的工作原理和优缺点,将有助于...

    VTD-XML 不同于SAX和DOM的XML高效解析器

    DOM解析器将整个XML文档加载到内存中,形成一个树形结构,每个节点代表XML文档的一部分。DOM提供了一个完整的文档视图,方便进行遍历和操作,但对内存需求较高,不适合处理大文件。 总结起来,VTD-XML是介于SAX和...

    dom和sax对xml的解析

    在Java中,有多种方式可以解析XML文档,其中最常用的是DOM(Document Object Model)和SAX(Simple API for XML)。本篇文章将详细介绍DOM和SAX解析XML的方法,并通过提供的`DomDemo.java`和`SaxDemo.java`示例代码...

    DOM解析XML文件例子

    在这个例子中,我们将深入探讨如何使用DOM解析XML文件,以理解和掌握XML文档的结构,并进行数据提取、修改和创建。 首先,XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据,具有自描述性和...

    XML-java.rar_XML SAX_sax_sax xml_sax 解析 xml_xml using dom

    Java作为一种强大的编程语言,提供了多种解析XML文档的方法,其中包括DOM(Document Object Model)和SAX(Simple API for XML)。本压缩包文件“XML-java.rar”包含了关于使用Java解析XML的实例,特别强调了SAX解析...

Global site tag (gtag.js) - Google Analytics