专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »XML教程 » netframework2.0:在.NET Framework中轻松处理XML数据(一) »正文

netframework2.0:在.NET Framework中轻松处理XML数据(一)

来源: 发布时间:星期四, 2009年2月12日 浏览:86次 评论:0


在.NET Framework中XmlTextReader和XmlTextWriter类提供了对xml数据读和写操作在本文中作者讲述了XML阅读器(Reader)体系结构及它们怎样和XMLDOM 和SAX 解释器结合作者也演示了如何样运用阅读器分析和验证XML文档如何样创建格式良好XML文档以及如何样用读/写基于Base64和BinHex编码大型XML文档最后作者讲了如何样实现个基于流读/写分析器它把读写器都封装在个单独类里

大概 3年前我参加了个软件Software研讨会主题是“没有XML就没有编程未来”XML确实也在发展它已经嵌入到. NET Framework中了在本文中我将讲解. NET Framework中用于处理XML文档API角色和它内部特性然后我将演示些常用功能

从MSXML到.netXML

在. NET Framework出现的前你习惯使用MSXML服务----个基于COM类库---写windowsXML驱动不像. NET Framework中MSXML类库部分代码比API更深它完全嵌在操作系统底层MSXML确能够和你应用通信但是它不能真正和外部环境结合

MSXML类库能在win32中被导入也能在CLR中运用但它只能作为个外部服务器组件使用但是基于.NET Framework应用能直接用XML类和.NET Framework 其它命名空间整合使用并且写出来代码易于阅读

作为个独立组件MSXML分析器提供了些高级特性如异步分析这个特性在.NET Framework中XML类及.NET Framework其它类都没有提供但是NET Framework中XML类和其它类整合可以很轻易获得相同功能在这个基础上你可以增加更多功能

.NET Framework中XML类提供了基本分析、查询、转换XML数据功能在.NET Framework中你可以找到支持Xpath查询和XSLT转换及读/写XML文档另外.NET Framework也包含了其它处理XML例如对象序列化(XmlSerializer和the SoapFormatter类)应用配置(AppSettingsReader类)数据存储(DataSet类)在本文中我只讨论实现基本XML I/O操作

XML分析模式

既然XML是种标记语言就应该有种工具按语法来分析和理解存储在文档中信息这个工具就是XML分析器---个组件用于读标记文本并返回指定平台对象

所有XML分析器不管它属于哪个操作平台不外乎都分以下两类:基于树或者基于事件处理器这两类通常都是用XMLDOM(the Microsoft XML Document Object Model)和SAX(Simple API for XML)来实现XMLDOM分析器是个普通基于树API---它把XML文档当成个内存结构树呈现SAX分析器是基于事件API----它处理每个在XML数据流中元素(它把XML数据放进流中再进行处理)通常DOM能被个SAX流载入并执行因此这两类处理不是相互排斥

总来说SAX分析器和XMLDOM分析器正好相反它们分析模式存在着极大差别XMLDOM被很好定义在它functionalition集合里面你不能扩展它当它在处理个大型文档时它要占用很大内存空间来处理functionalition这个巨大集合

SAX分析器利用客户端应用通过现存指定平台对象例子去处理分析事件SAX分析器控制整个处理过程把数据“推出”到处理该处理依次接受或拒绝处理数据这种模式优点是只需很少内存空间

.NET Framework完全支持XMLDOM模式但它不支持SAX模式为什么呢?.NET Framework支持两种区别分析模式:XMLDOM分析器和XML阅读器它显然不支持SAX分析器但这并不意味它没有提供类似SAX分析器功能通过XML阅读器SAX所有功能都能很容易实现及更有效运用不像SAX分析器.NET Framework阅读器整个都运作在客户端应用下面这样应用本身就可以只把真正需要数据“推出”然后从XML数据流中跳出来而SAX分析模式要处理所有对应用有用和无用信息

阅读器是基于.NET Framework流模式工作工作方式类似于数据库游标有趣实现类似游标分析模式类提供对.NET Framework中XMLDOM分析器底层支持XmlReader、XmlWriter两个抽象类是所有.NET Framework中XML类基础类包括XMLDOM类、ADO.NET驱动类及配置类所以在.NET Framework中你有两种可选思路方法去处理XML数据用XmlReader和XmlWriter类直接处理XML数据或者用XMLDOM模式处理更多有关在.NET Framework中读文档介绍可以参见MSDN 2002 年 8月刊Cutting Edge栏目文章



XmlReader类

XML阅读器支持个编程接口接口用于连接XML文档“推出”你要数据如果你更深入去了解阅读器你会发现阅读器工作原理类似于我们桌面应用从数据库中取出数据原理数据库服务返回个游标对象它包含所有查询结果集并返回指向目标数据集开始地址引用XML阅读器客户端收到个指向阅读器例子引用该例子提取底层数据流并把取出数据呈现为棵XML树阅读器类提供只读、向前游标,你可以用阅读器类提供思路方法滚动游标遍历结果集中条数据

从阅读器中看XML文档不是个标签文本文件而是个序列化节点集合它是.NET Framework中种特殊游标模式;在.NET Framework中,你找不到其它任何个类似API

阅读器和XMLDOM分析器有几点区别地方XML阅读器是只进它没有父、子、祖宗、兄弟节点概念而且是只读在.NET Framework中读写XML文档是分为两种完全区别功能分别由XmlReader和XmlWriter类来完成要编辑XML文档你可以用XMLDOM分析器或者你自己设计个类来实现这两种功能让我们开始分析阅读器功能

XmlReader是个抽象类你可以继承并扩展它功能用户般都基于下面 3种类:XmlTextReader、XmlValidatingReader或者 XmlNodeReader类所有这些类都有如图属性和图 2思路方法要注意某些属性值实际上依赖于实际某个阅读器类区别类和基类可能区别因此在图中每个属性介绍说明都是以基类为准例如CanResolveEntity属性在XmlValidatingReader类中只返回true;而在其它阅读器类中它却可以设为false同样在图 2中某些思路方法实际返回值对区别类可能区别例如如果节点类型不是元素节点(element node),所有包含Atrributes思路方法返回值类型都是void



XmlTextReader类用只进只读方式快速访问XML数据流阅读器先验证XML文档是否是格式良好如果不是则抛出个异常XmlTextReader 检查 DTD 格式是否良好但不使用 DTD 对文档进行验证XmlTextReader通过XML文档文件名或它URL或者从文件流中载入XML文档然后快速处理

[1][2]下

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: