SAX (Simple API for XML) 和 DOM (Document Object Model) 是当前两个主要的XML API,几乎所有商用的xml 解析器都同时实现了这两个接口。因此如果你的程序使用了SAX或者DOM APIs,那么你的程序对xml解析器是透明。
1) DOM以一个分层的对象模型来映射xml文档。而SAX将文档中的元素转化为对象来处理。
2) DOM将文档载入到内存中处理,而SAX则相反,它可以检测一个即将到来的 XML流,由此并不需要所有的XML代码同时载入到内存中。
SAX 处理涉及以下步骤:
1) 创建一个事件处理程序。
2) 创建 SAX 解析器。
3) 向解析器分配事件处理程序。
4) 解析文档,同时向事件处理程序发送每个事件。
--基于事件的处理的优点和缺点
这种处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。
另一方面,由于应用程序没有以任何方式存储数据,使用 SAX 来更改数据或在数据流中往后移是不可能的。
--基于树的处理的优点和缺点
DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。
另一方面,在内存中构造这样的树涉及大量的开销。大型文件完全占用系统内存容量的情况并不鲜见。此外,创建一棵 DOM 树可能是一个缓慢的过程。
如何在 SAX 和 DOM 之间选择
选择 DOM 还是选择 SAX,这取决于下面几个因素:
1) 应用程序的目的:如果打算对数据作出更改并将它输出为 XML,那么在大多数情况下,DOM 是适当的选择。并不是说使用 SAX 就不能更改数据,但是该过程要复杂得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。
2) 数据容量: 对于大型文件,SAX 是更好的选择。
数据将如何使用:如果只有数据中的少量部分会被使用,那么使用 SAX 来将该部分数据提取到应用程序中可能更好。 另一方面,如果您知道自己以后会回头引用已处理过的大量信息,那么 SAX 也许不是恰当的选择。
3) 对速度的需要: SAX 实现通常要比 DOM 实现更快。
SAX 和 DOM 不是相互排斥的,记住这点很重要。您可以使用 DOM 来创建 SAX 事件流,也可以使用 SAX 来创建 DOM 树。事实上,用于创建 DOM 树的大多数解析器实际上都使用 SAX 来完成这个任务!
分享到:
相关推荐
### SAX与DOM之间的区别 #### 一、概述 在处理XML文档时,开发人员面临着一个基本的选择:使用DOM(文档对象模型)还是SAX(简单的API for XML)。这两种方法各有优势,选择哪一种取决于具体的应用场景和技术需求...
本篇文章将探讨四种处理XML的Java库:DOM、JDOM、SAX和DOM4J,分析它们的原理、性能特点以及适用场景。 首先,我们来了解DOM(Document Object Model)。DOM是W3C组织定义的一种API,它将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,然后...
StaX是另一种流式API,介于DOM和SAX之间。它允许程序以推送或拉取的方式处理XML流,可以减少内存使用,同时提供了随机访问能力。与SAX相比,StaX更易于使用,因为它提供了XML事件生成器,可以按需读取XML数据。 在...
StAX是Java提供的一个流式解析API,它介于DOM和SAX之间。像SAX一样,StAX也是事件驱动的,但它允许程序员以拉式(pull)的方式控制解析过程,这样可以在需要时获取数据,减少了内存消耗。StAX在生成XML字符串时,...
而JDOM和DOM4J则在易用性和性能之间取得平衡,适合那些希望简化DOM操作而又不牺牲太多性能的项目。 对于XML的源码分析,可以研究这些解析器的内部实现,理解它们如何解析XML、触发事件或构建DOM树。同时,还可以...
本文将深入探讨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介于DOM和SAX之间,它也采用事件驱动模型,但允许程序以拉取(pull-based)模式按需读取XML数据,而不是等待事件触发。这种方式比DOM节省内存,比SAX更灵活,因为它允许开发者选择何时读取下一个事件,适合处理...
- 如果处理的XML文档既大又不需要频繁查询,可以选择StAX(Streaming API for XML),这是一种流式解析方式,介于DOM和SAX之间,性能优于DOM,灵活性接近SAX。 4. Java XML解析库: 除了Java自带的解析库,还有第三...
DOM解析器与JDOM类似,将整个XML文档加载到内存中形成一个树形结构,便于操作,但同样不适合处理大型XML文件。 在选择XML解析器时,需要考虑以下因素: - **性能**:如果XML文件较小,可以选择DOM或JDOM;对于大型...
本课程主要关注XML的基础知识,特别是DOM(Document Object Model)解析和SAX(Simple API for XML)解析两种主要的解析方式。 DOM解析是将整个XML文档加载到内存中形成一个树形结构,称为DOM树。每棵树的节点代表...
为了处理XML文档,Java提供了多种解析方法,包括SAX(Simple API for XML)、JDOM(Java Document Object Model)、DOM(Document Object Model)以及stAX(Streaming API for XML)。下面将详细介绍这四种解析XML的...
与DOM不同,SAX不会将整个文档加载到内存中,而是逐个解析文档中的事件(如开始元素、结束元素等),这使得它在处理大型文件时更加高效。SAX的关键概念包括: - **解析器**:负责读取XML文档并生成事件。 - **事件...
JDOM在性能上介于SAX和DOM之间,内存占用比DOM少,但比SAX多。它的优势在于简化了XML处理,特别是对于Java开发者来说,代码可读性和可维护性更高。 在实际应用中,选择哪种解析方式取决于具体需求。如果需要高效...
7. **与JAXB集成**:DOM4J可以与Java Architecture for XML Binding (JAXB) 集成,方便地在XML和Java对象之间进行转换。 8. **与Spring框架集成**:在Spring框架中,DOM4J常用于配置文件的解析,例如Spring的bean...
总结起来,VTD-XML是介于SAX和DOM之间的一个折衷方案,它在保持低内存占用的同时,提供了XPath支持和更高的性能,对于那些需要高效解析和查询XML的应用来说,VTD-XML是一个理想的选择。同时,它的跨平台性和多语言...
XMLPullParser可以视为SAX和DOM之间的折衷方案,它不需要实现`DefaultHandler`,而是直接调用一系列方法来移动解析器并处理当前事件。 总结,Android中的XML解析主要有DOM、SAX和XMLPullParser三种方式,每种都有其...
1. **DOM4J概述**:DOM4J是一个开源的Java XML API,它是对DOM、SAX和JDOM的扩展,提供了更简单、更灵活且更强大的API。它支持XPath和XSLT,可以用于构建和解析XML文档,同时也支持事件模型和流解析。 2. **XML处理...