以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 精华版 』 (http://bbs.xml.org.cn/list.asp?boardid=37) ---- [0204050] 为什么SAX|DOM同时存在? (http://bbs.xml.org.cn/dispbbs.asp?boardid=37&rootid=&id=7710) |
-- 作者:yuji1998 -- 发布时间:5/20/2004 3:14:00 AM -- [0204050] 为什么SAX|DOM同时存在?
为什么SAX|DOM同时存在? -------------------------------------------------------------------------------- SAX (Simple API for XML) 和 DOM (Document Object Model) 都是为了让程序员不用写一个解析器就可以访问他们的资料信息。通过利用XML 1.0格式保存信息,以及使用SAX或者DOM APIs你的程序可以使用任何解析器。这是因为使用他们所喜爱的语言开发解析器的开发者必须实现SAX和DOM APIs。 SAX和DOM APIs 对多种语言中都可以实现(Java, C++, Perl, Python, 其它...)。 所以SAX 和 DOM都是为了同样的目的而存在,这就是使用户可以利用任何编程语言访问存入XML文档中的信息(要有一个那种编程语言的解析器)。虽然他们在提供给你访问信息的方法上大不相同。 什么是DOM? 因为在DOM中,每一个元素节点实际上都有一系列的其他节点作为它的孩子。这些孩子节点可以包含文本值或者是其他元素节点。乍看起来,通过遍历访问一个元素的所有孩子节点来访问这个节点的值是没有必要的(举例来说:节点 "<name> Nazmul </name>", Nazmul是值)。如果每个元素只有值的话,这确实是没有必要的。但是,元素可能含有文本数据或者其他元素;这是你要在DOM中做额外的工作来获取元素节点值的原因。 通常当你的文档中只有纯数据时,把所有的数据压成一个“块“放到字串中并让DOM把那个字串当成某个特定元素节点的值返回是适当的。这种方式并不适合如果在你的XML文档中的数据是个文档(比如像WORD文档或者FRAMEMAKER文档) 在文档中,元素的顺序是非常重要的。对于纯数据(像一个数据库表)元素的顺序是不要紧的。 之所以DOM保持从XML文档中读出的元素的顺序,因为它把所有的事物都当成文档来处理。 文档对像模型的叫法由此而来。 如果你计划用DOM做为JAVA对象模型用于你存储在XML文档中的信息,那么你不需要考虑SAX。可是如果你发现DOM不是一个可以用于处理XML文档信息的好的对象模式,那么你可能想看看SAX了。在一些必须使用自定义对象模型的案例中使用SAX是非常普遍的。说一句让事情看来有些糊涂的话,你也可以在DOM的基础之上创建自己的对象模式。面向对象真是个好东东。 创立你自己的自定义对像模型 在使用DOM的情况下,解析器做了绝大多数事情, 读入XML文档, 在这基础之上创建JAVA对象模型,然后给你一个对这个对象的引用(一个 Document对象),因而你可以操作使用它。SAX被叫做Simple API for XML不是没有原因的, 她真的很简单。 SAX没有期待解析器去做这么多工作,所有SAX 要求的是解析器应该读入XML文档,同时根据所遇到的XML文档的标签发出一系列事件。你要自己写一个XML文档处理器类(XML document handler class)来处理这些事件,这意味着使所有标签事件有意义还有用你自己的对象模型创建对象。所以你要完成: 控制所有XML文档信息的自定义对象模型(或者源文档在这里的写法从来没有见过,或者怀疑源文档在这里有排版错误,先这么翻了) 什么类型的SAX事件被SAX解析器抛出了哪? 这些事件实际上是非常简单的。SAX会对每一个开始标签抛出事件,对每一个结束标签也是如此。它对#PCDATA和 CDATA 部分同样抛出事件。你的文档处理器 (对这些事件的监听器)要解释这些事件同时还要在他们基础之上创建你自定义的对象模型。 你的文档处理器必须对这些事件做出解释,同时这些事件发生的顺序是非常重要的。SAX同时也对processing instructions, DTDs, comments, 抛出事件. 但是它们在概念上是一样的, 你的解析器要解释这些事件(还有这些事件的发生顺序)以及使他们有意义。 然而,如果你主要处理的是结构化的数据(在XML中的序列化的JAVA对象the equivalent of serialized Java objects in XML),DOM不是最好的选择。那就是SAX会比较合适的地方。 什么时候使用SAX 存成XML格式的Java对象属性 当你的数据是这种样式,你要创建你自己的数据结构和类(对象模型)来管理操作以及持续保存这些数据。SAX容许你快速创建一个可以生成你的对象模型实例的处理器类。一个实例是:一个SAX文档处理器。它完成的工作有读入包含我的地址薄信息的XML文档,创建一个可以访问到这些信息的AddressBook类。SAX指南告诉你该怎么做到这些。这个地址薄XML文档包含person元素,person元素中有name和email元素。我的AddressBook对象模型包括下面的类: AddressBook 类,Person对象的容器
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
9,310.547ms |