DOM、SAX,以及何时哪个更合适

转载 2006年06月07日 15:10:00

SAX 处理是如何工作的

SAX 在读取 XML 流的同时处理它们,这很像以前的自动收报机纸带(ticker tape)。请考虑下面的 XML 代码片断:

<?xml version="1.0"?>
<samples>
   <server>UNIX</server>
   <monitor>color</monitor>
</samples>

分析这个代码片断的 SAX 处理器一般情况下将产生以下事件:

Start document
Start element (samples)
Characters (white space)
Start element (server)
Characters (UNIX)
End element (server)
Characters (white space)
Start element (monitor)
Characters (color)
End element (monitor)
Characters (white space)
End element (samples)

SAX API 允许开发人员捕捉这些事件并对它们作出反应。

SAX 处理涉及以下步骤:

  1. 创建一个事件处理程序。
  2. 创建 SAX 解析器。
  3. 向解析器分配事件处理程序。
  4. 解析文档,同时向事件处理程序发送每个事件。

基于事件的处理的优点和缺点

这种处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。

另一方面,由于应用程序没有以任何方式存储数据,使用 SAX 来更改数据或在数据流中往后移是不可能的。

DOM 是基于树的处理

DOM 是处理 XML 数据的传统方法。使用 DOM 时,数据以树状结构的形式被加载到内存中。

例如,在SAX 处理是如何工作的中用作例子的相同文档在 DOM 中将表示为节点,如下所示:

表示为 DOM 的示例

矩形框表示元素节点,椭圆表示文本节点。

DOM 使用父子关系。例如,在这个例子中,samples 是具有五个孩子的根元素:三个文本节点(空白),以及两个元素节点 servermonitor

要认识到的一件重要事情是,servermonitor 节点实际上具有 null 值。相反,它们具有文本节点(UNIXcolor)作为孩子。

基于树的处理的优点和缺点

DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。

另一方面,在内存中构造这样的树涉及大量的开销。大型文件完全占用系统内存容量的情况并不鲜见。此外,创建一棵 DOM 树可能是一个缓慢的过程。

如何在 SAX 和 DOM 之间选择

选择 DOM 还是选择 SAX,这取决于下面几个因素:

  • 应用程序的目的:如果打算对数据作出更改并将它输出为 XML,那么在大多数情况下,DOM 是适当的选择。并不是说使用 SAX 就不能更改数据,但是该过程要复杂得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。
  • 数据容量: 对于大型文件,SAX 是更好的选择。
  • 数据将如何使用:如果只有数据中的少量部分会被使用,那么使用 SAX 来将该部分数据提取到应用程序中可能更好。 另一方面,如果您知道自己以后会回头引用已处理过的大量信息,那么 SAX 也许不是恰当的选择。
  • 对速度的需要: SAX 实现通常要比 DOM 实现更快。

SAX 和 DOM 不是相互排斥的,记住这点很重要。您可以使用 DOM 来创建 SAX 事件流,也可以使用 SAX 来创建 DOM 树。事实上,用于创建 DOM 树的大多数解析器实际上都使用 SAX 来完成这个任务!

Dom和Sax的差异区分

  • 2013年07月02日 20:41
  • 14KB
  • 下载

XML(SAX与DOM解析)内附实例与PPT

  • 2008年11月10日 19:37
  • 168KB
  • 下载

XML解析、DOM解析、SAX解析、Json解析

Url查看api url 读取内容为图片时使用字节流的读取方法示例 读取网站源代码时可以用字符读取方式示例 枚举 xml解析 DOM解析 对dom中节点的解释 解析整个文档导入包都是dom的附加解释 ...

XML解析DOM/SAX/PULL

  • 2013年09月03日 18:02
  • 101KB
  • 下载

dom解析和sax解析

  • 2013年06月24日 09:19
  • 31KB
  • 下载

详解android解析Xml的三种方式——DOM、SAX以及XMLpull

今天学习了android解析Xml的三种方式——DOM、SAX以及XMLpull,这里对它们进行总结。 如果理解有误,欢迎指正   ^_* 一、DOM方式解析: xml是先把xml文...

Android sax pull dom 文件解析 示例

  • 2013年03月18日 15:26
  • 677KB
  • 下载

DOM与SAX入门

  • 2013年03月01日 23:09
  • 668KB
  • 下载

Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解...

dom和sax对xml的解析

  • 2014年11月19日 10:09
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DOM、SAX,以及何时哪个更合适
举报原因:
原因补充:

(最多只允许输入30个字)