ITPUB??ì3

新一届的微软MVP评选已经开始,欢迎各位推荐!

标题: SAX 与DOM
离线 Arraychooli
一般会员


精华贴数 2
个人空间 0
技术积分 430 (4508)
社区积分 0 (120889)
注册日期 2004-6-28
论坛徽章:1
管理团队2006纪念徽章     
      

发表于 2004-7-24 08:08 
SAX 与DOM

作为通用的XML处理接口(API),SAX和DOM是目前W3C推荐并标准化了的两个规范。也是开发人员日常使用得最多的XML技术之一。
到底,这两个接口有什么不同呢,如何使用这两个接口和在什么时候用什么接口呢?

希望大家发表一些见解。帮助深入了解这两个API的实际应用情况。


__________________
观察世界,创造世界
只看该作者    顶部
离线 itsuperman
版主



精华贴数 1
个人空间 0
技术积分 979 (1896)
社区积分 12 (9583)
注册日期 2001-11-9
论坛徽章:3
ITPUB元老管理团队2006纪念徽章授权会员   
      

发表于 2004-7-24 19:58 
偶发表一下吧

简单来说, 用DOM来处理一份XML文本文件, 它所做的第一件事就是解析文件, 它把文件中的元素, 属性, 注释,处理指令, 甚至构成属性的文本都视为一个个叫节点的东西,然后在内存中创建一  棵节点树来表示这个XML文档. 开发者就可以通过节点树访问文档的内容, 并且进行修改.
而SAX就相对有点抽象, 它是通过一系列的事件让你访问XML文档的信息.它的做法就是遍历整个XML文档, 并且根据遇到的标记激活事件.


__________________
我喜欢X元素, 因为它代表一种未知.所以我衷情于XML.itsuperman22@hotmail.com
只看该作者    顶部
离线 chooli
一般会员


精华贴数 2
个人空间 0
技术积分 430 (4508)
社区积分 0 (120889)
注册日期 2004-6-28
论坛徽章:1
管理团队2006纪念徽章     
      

发表于 2004-7-24 23:12 
补充一点,使用DOM的程序在解析完XML后将会得到一个描述目标XML的DOM树,然后程序根据树的通用API来进行进一步的处理;而使用SAX的程序,在解析完XML以后将不在存在XML的任何信息,SAX是一个低级的基于XML标记格式处理的API,程序主要捕抓感兴趣的事件。

我的问题是想请教针对这两者在实际的应用例子。有人做过吗?


__________________
观察世界,创造世界
只看该作者    顶部
离线 Joy
一般会员



精华贴数 0
个人空间 0
技术积分 202 (9335)
社区积分 0 (48887)
注册日期 2001-11-25
论坛徽章:0
      
      

发表于 2004-7-26 07:04 
我也没做过, 不过看来SAX适合处理比较大的XML文件, 而DOM在编辑XML方便有优势.
XML in a Nutshell, 2nd Edition
18.1.2 DOM Strengths and Weaknesses
Like all programming tools, the DOM is better for addressing some classes of problems than others. Since the DOM object hierarchy stores references between the various nodes in a document, the entire document must be read and parsed before it is available to a DOM application. This step also demands that the entire document be stored in memory, often with a significant amount of overhead. Some early DOM implementations required many times the original document's size when stored in memory. This memory usage model makes DOM unsuitable for applications that deal with very large documents or have a need to perform some intermediate processing on a document before it has been completely parsed.

However, for applications that require random access to different portions of a document at different times or applications that need to modify the structure of an XML document on the fly, DOM is one of the most mature and best-supported technologies available.


只看该作者    顶部
离线 firefly
初级会员



精华贴数 0
个人空间 0
技术积分 62 (23590)
社区积分 0 (123587)
注册日期 2004-7-9
论坛徽章:0
      
      

发表于 2004-7-26 18:24 
“SAX适合处理比较大的XML文件, 而DOM在编辑XML方便有优势”

SAX并不是说适合处理比较大的XML文件,由于它不需要将整个XML解释到内存里,所以耗内存少。事件驱动的它适合文档节点的查找。
如果要对XML文档进行编辑修改,就要使用到DOM,不过由于要Paser 文档到内存里去,所以如果文档太大,速度就会慢。


只看该作者    顶部
离线 wangcunjiang
钝刀


精华贴数 1
个人空间 0
技术积分 1449 (1169)
社区积分 3476 (392)
注册日期 2002-9-29
论坛徽章:24
ITPUB元老会员2007贡献徽章会员2006贡献徽章授权会员生肖徽章2007版:兔2008年新春纪念徽章
生肖徽章2007版:鼠生肖徽章2007版:鸡生肖徽章2007版:鼠生肖徽章2007版:鼠ITPUB新首页上线纪念徽章 

发表于 2004-8-4 14:39 
简单说,只读用sax,修改用dom;大的xml用sax;


__________________
******************************************
专搞电子政务和OA,如果有需要电子政务/OA系统的或者切磋技术的同志们可以联系我。
msn:
Gmail邀请:
------------------------------ItPub常客(有时间就来)!^_^
只看该作者    顶部
离线 yining
非典型性会员


精华贴数 17
个人空间 0
技术积分 13150 (87)
社区积分 12571 (117)
注册日期 2001-11-13
论坛徽章:31
现任管理团队成员2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:击剑2008北京奥运纪念徽章:足球生肖徽章2007版:蛇生肖徽章2007版:鸡
生肖徽章2007版:龙生肖徽章:猪生肖徽章:虎   

发表于 2004-8-5 09:33 
SAX不见的对于大型的xml就有好处。原因很简单,sax没有记忆。所以如果需要对一些容易混淆,必须记忆路径的xml进行操作,比如<root><abc>.......<all_the_same><different>text1</different>和<root><abc>.......<all_the_same><different2>text1</different2>这样的XPath进行读取,SAX会由路径的加长变得异常复杂。由此带来的内存开销的节省也可能不复存在。


__________________
Evil prevails when good men fail to act.
只看该作者    顶部
离线 itsuperman
版主



精华贴数 1
个人空间 0
技术积分 979 (1896)
社区积分 12 (9583)
注册日期 2001-11-9
论坛徽章:3
ITPUB元老管理团队2006纪念徽章授权会员   
      

发表于 2004-8-6 00:09 
不能随机存取文档也是SAX的一个不足,它只能按顺序地去处理模型而不能象DOM那样随机地去存取一个文档, 例如正在被解析的元素不会知道已经或将要被解析的元素是什么, 所以, 我觉得SAX对整个XML文档的搜索是一件比较繁重的工作, 不过其实也可以用SAX从文档中挑选出所需要的部分出来, 再建立树状模型, 用DOM去处理, 这也可以实现对文档的随机存取,不过编程的难度就相对增加了.


__________________
我喜欢X元素, 因为它代表一种未知.所以我衷情于XML.itsuperman22@hotmail.com
只看该作者    顶部
离线 wangcunjiang
钝刀


精华贴数 1
个人空间 0
技术积分 1449 (1169)
社区积分 3476 (392)
注册日期 2002-9-29
论坛徽章:24
ITPUB元老会员2007贡献徽章会员2006贡献徽章授权会员生肖徽章2007版:兔2008年新春纪念徽章
生肖徽章2007版:鼠生肖徽章2007版:鸡生肖徽章2007版:鼠生肖徽章2007版:鼠ITPUB新首页上线纪念徽章 

发表于 2004-8-6 09:46 


QUOTE:
最初由 itsuperman 发布
不能随机存取文档也是SAX的一个不足,它只能按顺序地去处理模型而不能象DOM那样随机地去存取一个文档, 例如正在被解析的元素不会知道已经或将要被解析的元素是什么, 所以, 我觉得SAX对整个XML文档的搜索是一件比较繁重的工作, 不过其实也可以用SAX从文档中挑选出所需要的部分出来, 再建立树状模型, 用DOM去处理, 这也可以实现对文档的随机存取,不过编程的难度就相对增加了.

嗯,这个方法还不错啊!


__________________
******************************************
专搞电子政务和OA,如果有需要电子政务/OA系统的或者切磋技术的同志们可以联系我。
msn:
Gmail邀请:
------------------------------ItPub常客(有时间就来)!^_^
只看该作者    顶部
离线 wangcunjiang
钝刀


精华贴数 1
个人空间 0
技术积分 1449 (1169)
社区积分 3476 (392)
注册日期 2002-9-29
论坛徽章:24
ITPUB元老会员2007贡献徽章会员2006贡献徽章授权会员生肖徽章2007版:兔2008年新春纪念徽章
生肖徽章2007版:鼠生肖徽章2007版:鸡生肖徽章2007版:鼠生肖徽章2007版:鼠ITPUB新首页上线纪念徽章 

发表于 2004-8-6 09:49 


QUOTE:
最初由 yining 发布
SAX不见的对于大型的xml就有好处。原因很简单,sax没有记忆。所以如果需要对一些容易混淆,必须记忆路径的xml进行操作,比如<root><abc>.......<all_the_same><different>text1</different>和<root><abc>.......<all_the_same><different2>text1</different2>这样的XPath进行读取,SAX会由路径的加长变得异常复杂。由此带来的内存开销的节省也可能不复存在。

是啊,不见得大型xml就用sax,只是为了资源、效率才如此的。


__________________
******************************************
专搞电子政务和OA,如果有需要电子政务/OA系统的或者切磋技术的同志们可以联系我。
msn:
Gmail邀请:
------------------------------ItPub常客(有时间就来)!^_^
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问