在.NET Framework出现之前,习惯使用MSXML服务——一个基于COM的类库——写Windows的XML的驱动程序。不像.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是一种标记语言,就应该有一种工具按一定的语法来分析和理解存储在文档中信息。这个工具就是XML分析器——一个组件用于读标记文本并返回指定平台的对象。

   分析器的主要功能就是检查XML文件是否有结构上的错误,剥离XML文件中的标记,读出正确的内容,以交给下一步的应用程序处理。XML是一种用来结构化 文件信息的标记语言,XML规范中对于如何标记文件的结构性有一个详细的法则,解析器就是根据这些法则写出来的软件(多用Java写成)。同HTML一 样,在浏览器中,必须有HTML的分析器,这样浏览器才能够“读懂”各种用HTML标记所组成的网页,将它们显示在我们面前。如果有浏览器的HTML解析 器读不懂的标记,将会返回给我们错误信息。

所有的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模式处理。

  XML阅读器支持一个编程接口,接口用于连接XML文档,“推出”你要的数据。如果你更深入去了解阅读器,你会发现阅读器工作原理类似于我们的桌面 应用程序从数据库中取出数据的原理。数据库服务返回一个游标对象,它包含所有查询结果集,并返回指向目标数据集的开始地址的引用。XML阅读器的客户端收 到一个指向阅读器实例的引用。该实例提取底层的数据流并把取出的数据呈现为一棵XML树。阅读器类提供只读、向前的游标,你可以用阅读器类提供的方法滚动 游标遍历结果集中的每一条数据。  从阅读器中看XML文档不是一个标签文本文件,而是一个序列化的节点集合。它是.NET Framework中的一种特殊的游标模式;在.NET Framework中,你找不到其它的任何一个类似的API函数。

  阅读器和XMLDOM分析器有几点不同的地方。XML阅读器是只进的,它没有父、子、祖宗、兄弟节点的概念,而且是只读的。在.NET Framework中,读写XML文档是分为两种完全不同的功能,分别由XmlReader和XmlWriter类来完成。要编辑XML文档,你可以用 XMLDOM分析器。

  .net framework处理xml主要包System.Xml命名空间当中,而xml序列化则在System.Xml.Serialization 命名空间中,最后简要说一下有关DTD的概念。

  DTD(Document Type Definition,文档类型定义)它是一种规范,可以使商业组织间进行无缝的数据交换,打个比方,如果两个同行业的公司A和B要用XML文件相互交换数据,A公司用〈价格〉标记来表示他们产品的价格信息,而B公司可能用〈售价〉来表示价格信息。如果一 个XML应用程序来读取他们各自的XML文件中的信息时,如果它只知道〈价格〉标记里表示的是价格信息,那么B公司的价格信息就读不出来,必将产生错误。 显然,对于想利用XML文件来交换信息的实体来说,他们之间必须有一个约定——即编写XML文件可以用哪些标记,母元素中能够包括哪些子元素,各个元素出 现的顺序,元素中的属性怎样定义等。这么人帮我们就可以轻松地依据这个DTD 编写一个应用程序,去网上将我们感兴趣的东西自动抓回来。 这就是所谓的DTD,A和B公司在交换数据时都必须遵循一种规范。

  现在已经有了好几个定义好的DTD,如MathML、SMIL等。MathML‎(Mathematical Markup Language‎)即数学置标语言是一种基于XML的标准,用来在互联网上书写数学符号和公式的置标语言。它是由W3C的数学工作组提出的。由于数学符号和公式的结构复杂且符号与符号之间存在多种逻辑关系,MathML的格式十分繁琐。这个东东太复杂了,我懒得去研究它,随它吧。SMIL好像念作smile,是用来操纵多媒体片断(对多媒体片断的有机的、智能的组合)。 看来这东西真的不错!SMIL语言是一套已经规定好的而且非常简单的标记。它用来规定多媒体片断(这里多媒体的包括的范围有:声音文件、视频文件、动画、图片、文字等)在什么时候、在什么地方、以什么样的方式播放。 这些平时很少用到,不怎么了解这些东东!有时间到看下(工作压得我喘不过气来!真累人!)。

  文章就写到这里了,先告一段落吧!

henry

转载于:https://www.cnblogs.com/repository/archive/2008/12/16/1355987.html

.net framework处理xml相关推荐

  1. .NET Framework/.NET Compact Framework/.NET Micro Framework功能集比较

    该资料来源于三亚许云老师的 .NET Micro Framework的讲座,图片中红色部分表示支持的功能,绿色部分表示不支持,不过该图片我看了应该不是最新的,如.NET Compact Framewo ...

  2. 在.net中序列化读写xml方法的总结(转载)

    阅读目录 开始 最简单的使用XML的方法 类型定义与XML结构的映射 使用 XmlElement 使用 XmlAttribute 使用 InnerText 重命名节点名称 列表和数组的序列化 列表和数 ...

  3. python 读取与修改 XML(增删改查)

    XML操作 xml 访问与查找 xml 创建与修改 xml 增删改查 -- 综合案例 xml 访问与查找 import xml.etree.ElementTree as ETtree = ET.par ...

  4. \t\tINFO: Performance of XSLT Transformations in the .NET Framework

    一个字"慢" This article contains information about the causes of and solutions or workarounds ...

  5. XML及使用dom4j解析XML

    XML(Extensible Markup Language)表示可扩展的标记语言 XML的标签没有被预定义,也就是说不是固定的,用户可以根据自身的需求去自定义标签 XML的作用主要是用来存储数据和传 ...

  6. Spring3.2.8+Mybatis3.2.6 多数据源基于BaseDAO的配置

    Spring3.2.8+Mybatis3.2.6 多数据源基于BaseDAO的配置 配置数据源为: MySQL5.5.6 H2Database 1.3.75 这个配置起来比较麻烦,本文这种方法有点麻烦 ...

  7. 整理的常用JAVA开源库简介

    Jakarta common: Commons Logging Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于 ...

  8. android项目中values中几个文件的作用

    最近反编译了几个Android软件,发现一些以前未用到的资源文件: ids.xml--为应用的相关资源提供唯一的资源id.id是为了获得xml中的对象而需要的参数,也就是Object = findVi ...

  9. Carrier Configuration in Android 6.0 文档翻译

    Carrier Configuration in Android 6.0(主要就是carrier app) Introduction □介绍 The Android 6.0 Marshmallow r ...

最新文章

  1. [IoC容器Unity]第四回:使用范例
  2. Android_WebView加载网页保存信息到Cookie
  3. 看完这篇Redis缓存三大问题,保你能和面试官互扯。
  4. go应用程序写kafka阻塞(大坑)
  5. shell脚本获取系统的前一天日期,格式为yyyymmdd
  6. 石油化工设备维护检修规程_旋回破碎机横梁臂架、衬板、内外铜套检修步骤及设备检修维护要点...
  7. 微信小程序简介、发展史、小程序的优点、申请账号、开发工具、初识wxml文件和wxss文件
  8. django-模板语言dtl-render
  9. kotlin环境配置
  10. 【笔记】工具 - 输入法 - rime 小狼毫(weasel)
  11. 相思赋予谁 --知错
  12. MC官方模板的分析Day1
  13. 香港大学韩锴课题组招收CV和深度学习方向全奖博士/博后
  14. 计算机游戏动漫制作自我鉴定,动画制作专业毕业生的自我鉴定范文(精选5篇)...
  15. 求[X,Y]内被除3余1并且被除5余3的整数的和
  16. 微信小程序商城项目实战(第七篇:生成订单支付页)
  17. 耗时6个月,从月入3K到14K的,我都经历了什么......
  18. 计算机视觉:学术界与工业界GAP有多大?
  19. 常见链表面试题(下)
  20. html中swiper组件的使用

热门文章

  1. java 程序语言中的LinkedList 集合基本方法演示
  2. [转帖]web安全:通俗易懂,以实例讲述破解网站的原理及如何进行防护!如何让网站变得更安全。...
  3. javaScript设计模式之面向对象编程(object-oriented programming,OOP)(二)
  4. 智能路由器-OpenWRT 系列三 (OpenWRT安装LuCI网络配置)
  5. Mapnik使用postgres中的栅格数据
  6. 51单片机中断interrupt……using……
  7. nginx负载均衡配置-windows
  8. 转:PHP开发框架流行度排名:Laravel居首
  9. @ModelAttribute使用详解
  10. CAD答辩周 -- 与自己相关的几场