有关在.NET中使用XML的说法已经很多了,不幸的是,很多都非常夸张。但是仍然有两点是不可否认的:.NET使程序员拥有了一套集成的XML工具,这是微软第一次在它的开发平台中集成了对XML的支持。而且这次是完全的支持,在System.XML名字空间中可以找到超过150个类,真是一个另人惊讶的数字。接下来我会尝试带领初学者们对.NET中重要的XML类进行一番探索,并且粗略了解一下这些API背后的基本原理。
如果你以前用过XML,你可能会熟悉两种主要的解读器-文档对象模型(DOM)和用于XML的简单API(SAX)。这两种类型的解读器的行为有着根本上的不同:DOM将整个XML文档载入内存中的一棵分层树中,而SAX每次只取一个元素并通过某种通信接口返回这个元素到应用程序,直到整个文档结束。
DOM?SAX?它们是什么?
如果人们在说DOM时你想到“Deluise”,或者在说SAX时你想到“Coltrane”,那你在继续看下去之前应该去看一看Builder.com 上的文章" XML补习"系列 来了解一下它们。另外,如果你使用的是VB6,“在VB6中使用DOM创建XML文档”这篇文章能够使你更多地了解DOM。
这两套API都有各自的问题。DOM严重地耗费资源,特别在文档比较大的时候。SAX则不是那么好用,它需要程序员跟踪先前用过的元素,而且没有真正提供一种方法来处理被选择的部分文档。
.NET的XML类采取了这两套API的折衷方法,并且将它们的优点融合到微软称之为“pull model”的模型之中。你要知道,这只是一个名字,没有特别的意义。我曾把它叫作XML流或者XML堆栈,不过这样的名字可能不够性感。不管怎么样,在.NET中,是用pull mode的类来通过一种简单的流式接口来解析和创建XML文档的。System.XML.XMLWriter和System.XML.XMLReader这两个抽象类为.NET的pull model提供了XML支持。