XML有两种处理的方式:基于树的和基于事件的。很多Xml解析器包括MSXML的最新版本,对两种模型都是支持的。基于树的解析器通常也称为DOM(文档对象模型)解析器,而基于事件的解析器通常被称为SAX(XML简单的应用程序接口)解析器。二者都是以他们支持的规则去命名的。
DOM是W3C推荐的XML文档应用编程接口(API)的标准。所有的应用程序都可以使用这个API来操作XML,读取信息、添加节点以及编辑当前的内容。关于这个推荐标准可以在http://www.w3.org/TR.REC-DOM-Level-1/中了解更多的内容。
SAX并不是W3C的推荐标准,但也得到很多软件公司的支持。基于SAX的解析器顺序地读取XML文档,当他遇到文档的重要部分时会触发事件,比如在元素的起始或结束位置。在http://www.saxproject.org/中可以获取更多的内容。
两种模型的处理方式的优点比教:
基于DOM的解析提供了对XML文档的完整的读写访问,并且可以通过遍历文档树对文档内的节点进行访问。他可以对照DTD或XML模式来判断一个文档是否有效。
然而基于DOM的解析必须将XML的文档全部读入内存,所以当遇到较大的XML文档时,DOM的解析机制可能会变得缓慢并且比较消耗内存。但是实际工作中,我们是很难判断何种XML的文档才是过大的。
对于SAX的解析机制是串行操作的,一个节点被处理后就被丢弃了,并且不会再被处理。整个文档不会一次性的被读入内存,这样可以避免由于文档过大而引起的处理问题。这种处理方法将由用户负责保存XML文档中的可供后续使用的信息。
举例来说,对于一个通信系统的中间路由程序来说,SAX是理想的,一个读入的XML文档通常只有一个很小的路由首部信息,但需要发送到终点的文档却是很大的。使用SAX模型时,路由设备可以仅读路由信息而忽略掉整个文档,因为文档本身与传送并无太大关系,然而DOM机制却需要在读取整个文档才可以将之送入到终点。
以上内容简要描述了XML的两种处理模型,希望对大家理解XML有所帮助。