当你需要处理XML文档时,你的首要选择是使用DOM(文档对象模型)还是使用SAX(用于XML的简单API),即当前使用的两个主要的XML API。你可以使用任何一种(或者在同一时间使用两种)来处理XML文档,然而DOM将文档载入到内存中处理,而SAX则相反,它可以检测一个即将到来的 XML流,由此并不需要所有的XML代码同时载入到内存中。
选择DOM与SAX,与在一个数据库中的表单与视图之前选择一样:选择适合于当前实际情况的方法。如果你只是想简单地查看XML文档而不处理它,那么请选择使用SAX。
SAX与DOM之间的区别
1.SAX在概念上与DOM完全不同。首先,不同于DOM的文档驱动,它是事件驱动的,也就是说,它并不需要读入整个文档,而文档的读入过程也就是SAX的解析过程。所谓事件驱动,是指一种基于回调(callback)机制的程序运行方法。(如果你对Java新的代理事件模型比较清楚的话,就会很容易理解这种机制了)
2.DOM是复杂对象处理的首选,比如当XML比较复杂的时候,或者当你需要随机处理文档中数据的时候。SAX从文档的开始通过每一节点移动,以定位一个特定的节点。
3.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与DOM之间的区别 #### 一、概述 在处理XML文档时,开发人员面临着一个基本的选择:使用DOM(文档对象模型)还是SAX(简单的API for XML)。这两种方法各有优势,选择哪一种取决于具体的应用场景和技术需求...
本篇文章将探讨四种处理XML的Java库:DOM、JDOM、SAX和DOM4J,分析它们的原理、性能特点以及适用场景。 首先,我们来了解DOM(Document Object Model)。DOM是W3C组织定义的一种API,它将XML文档解析为一个树形结构...
JDOM在性能上介于SAX和DOM之间,内存占用比DOM少,但比SAX多。它的优势在于简化了XML处理,特别是对于Java开发者来说,代码可读性和可维护性更高。 在实际应用中,选择哪种解析方式取决于具体需求。如果需要高效...
StAX是Java提供的一个流式解析API,它介于DOM和SAX之间。像SAX一样,StAX也是事件驱动的,但它允许程序员以拉式(pull)的方式控制解析过程,这样可以在需要时获取数据,减少了内存消耗。StAX在生成XML字符串时,...
为了处理XML文档,Java提供了多种解析方法,包括SAX(Simple API for XML)、JDOM(Java Document Object Model)、DOM(Document Object Model)以及stAX(Streaming API for XML)。下面将详细介绍这四种解析XML的...
总结起来,VTD-XML是介于SAX和DOM之间的一个折衷方案,它在保持低内存占用的同时,提供了XPath支持和更高的性能,对于那些需要高效解析和查询XML的应用来说,VTD-XML是一个理想的选择。同时,它的跨平台性和多语言...
针对SAX、DOM和Pull解析器,我们可以设计测试用例检查解析出的学校数据是否与预期相符,例如校名、地址、学生数量等。同时,测试应覆盖异常情况,如非法XML格式或不存在的文件,以验证解析器的错误处理能力。 在...
XML(eXtensible Markup Language)是一种用于存储和传输数据的...此外,还可以考虑使用StAX(Streaming API for XML),这是一种介于DOM和SAX之间的解析方式,结合了两者的优势,既节省内存又允许有限的向前查找能力。
JDOM是Java特有的XML处理库,它提供了一个简单易用的API,介于DOM和SAX之间。JDOM将XML映射为Java对象,但比DOM更轻量级,解析速度也更快。 1. **JDOM读取XML**:使用`org.jdom2.input.SAXBuilder`解析XML,然后...
DOM解析器与JDOM类似,将整个XML文档加载到内存中形成一个树形结构,便于操作,但同样不适合处理大型XML文件。 在选择XML解析器时,需要考虑以下因素: - **性能**:如果XML文件较小,可以选择DOM或JDOM;对于大型...
本文将深入探讨XML开发中的四个关键概念:DTD(Document Type Definition)、CSS(Cascading Style Sheets)、XSLT(Extensible Stylesheet Language Transformations)以及DOM和SAX解析器。 1. DTD(Document Type...
与DOM不同,SAX不需要一次性加载整个XML文档,而是按需读取,逐事件处理,这使得它在处理大文件时更为高效。然而,由于其回调机制,SAX的使用相对于DOM和DOM4J来说更复杂一些。 `jaxen-1.1.1.jar` 是JAXEN(Java ...
StaX是另一种流式API,介于DOM和SAX之间。它允许程序以推送或拉取的方式处理XML流,可以减少内存使用,同时提供了随机访问能力。与SAX相比,StaX更易于使用,因为它提供了XML事件生成器,可以按需读取XML数据。 在...
而JDOM和DOM4J则在易用性和性能之间取得平衡,适合那些希望简化DOM操作而又不牺牲太多性能的项目。 对于XML的源码分析,可以研究这些解析器的内部实现,理解它们如何解析XML、触发事件或构建DOM树。同时,还可以...
7. **与JAXB集成**:DOM4J可以与Java Architecture for XML Binding (JAXB) 集成,方便地在XML和Java对象之间进行转换。 8. **与Spring框架集成**:在Spring框架中,DOM4J常用于配置文件的解析,例如Spring的bean...
Jaxen是一个独立的XPath引擎,它允许在多种XML API(包括DOM4J)之间统一执行XPath表达式。DOM4J虽然内置了一些XPath支持,但为了更全面的功能,它依赖Jaxen来提供更完整的XPath处理能力。 综上所述,DOM4J 1.6.1...
- 如果处理的XML文档既大又不需要频繁查询,可以选择StAX(Streaming API for XML),这是一种流式解析方式,介于DOM和SAX之间,性能优于DOM,灵活性接近SAX。 4. Java XML解析库: 除了Java自带的解析库,还有第三...
与DOM不同,SAX不会将整个文档加载到内存中,而是逐个解析文档中的事件(如开始元素、结束元素等),这使得它在处理大型文件时更加高效。SAX的关键概念包括: - **解析器**:负责读取XML文档并生成事件。 - **事件...
XMLPullParser可以视为SAX和DOM之间的折衷方案,它不需要实现`DefaultHandler`,而是直接调用一系列方法来移动解析器并处理当前事件。 总结,Android中的XML解析主要有DOM、SAX和XMLPullParser三种方式,每种都有其...