.NET中分析XML文档的方法

ZDNet软件频道 时间:2002-10-15 作者:BUILDER.COM |  我要评论()
本文关键词:
本文介绍了.Net中的XML分析器以及XML阅读器的原理和性能。
尽管XML文档容易转换,它还是需要一个用于收集重要信息的分析器。分析器用来把XML文档转化为某个平台下相应对象,传统上,分析器有两种——基于树的分析器和事件驱动分析器。

.NET框架借助XML阅读器改善了分析器的模型,它在传递数据时采用一种更加实用灵活的“pull”方法,与之相反的是早先分析器模型所用的“push”方法,push方法不太实用

让我们先看看传统分析器模型的基本结构,然后讨论.NET是如何在此基础上更进一步的。

树分析器

树分析器读取XML文档的全部内容,然后在内存中创建一个代表XML文档内容的对象。一般,该对象在Win32平台下是一个COM组件的对象,而在非Windows平台上为Java类的一个对象。W3C按照文档对象模型(DOM)一级标准和二级标准来管理该对象的原型。

事件驱动分析器

事件驱动分析器的原理与树分析器截然不同,追求的目标也不一样。事件驱动分析器甚至无需为源文档在内存中建立对应的对象。它仅仅分析文档并把它在分析的过程中所发现的标记通知客户程序;如何对此进行处理由客户程序来负责。事件驱动分析器不用存储(分析后得到的)信息,因此它占用的内存相当的小。Simple API for XML(SAX)就是以事件驱动分析器为主。

.NET中的XML分析器

.NET框架中的XML API支持XML DOM分析模型,但不支持SAX模型。

SAX是一个push模型;分析器与客户程序是两个分开的实体。实际上,客户程序扮演了一个十分被动的角色,它用来处理节点和片断(fragment),而不是把文档作为一个整体来处理。客户程序登记到分析器,并获得分析器在文档中找到节点所发出的全部通知。当登记时,客户程序可以向分析器提供它所感兴趣的节点类型的概括信息。

然而,这样设置过滤条件是静态的,不能随着运行时的状态选择节点。程序可以指示分析器只返回满足条件的节点、丢弃其余的节点,如处理指令、注释和实体。程序滤除不需要的节点成分的唯一方法就是忽略与之相关的事件和SAX分析器push的所有信息。

.NET框架提供了一种更有效的分析XML文档的方法,该方法处理XML文档的方式有只读、不缓冲、前向的三个特点。这种新一代的分析器提供一个文档阅读器和若干pull模型函数,这与SAX push模型相反。文档阅读器是.NET框架的一个常见元素,它覆盖到各个领域,如文件输入输出、对数据库的访问以及内存管理。

XML阅读器是一个类,它按着节点次序读取源文档,它按根先法(在这里先访问根节点,然后访问左子树,最后访问右子树)访问XML树。根先法指的是先分析子树的根节点,然后分析出现顺序访问根结点的子树的算法。按根先法的访问顺序与磁盘文件中XML节点保存顺序是相吻合的。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134