XML(eXtensible Markup Language)是由万维网协会(W3C)推出的新一代数据交换的标准。HTML是XML的先驱,XML延续了HTML的简单性的优点。XML不是用来替代HTML的, XML和HTML为不同的目的而设计: XML被设计用来描述数据,其焦点是数据的内容。HTML被设计用来显示数据,其焦点是数据的外观。HTML旨在显示信息,而XML旨在描述信息。

XML不是一种可执行的程序,它只是一种数据的载体,不过由于这种数据载体的格式简单易懂,加上良好的扩充性能,使得XML的用处十分广泛。从三大框架的各种配置文件到Ajax中的数据交换,再到Web Service的推行、SOA理念的应用等等,都离不开XML。

XML是一种简单的数据格式,是100%的纯ASCII文本,而ASCII的抗破坏力是很强的,从高级的角度看,是一种自描述语言。XML可用于数据交换,主要是因为XML表示的信息独立于平台,即不同的应用程序或者不同的操作系统。

在针对XML文档的应用编程接口中,一般有两种模型:W3C制定的DOM(Document Object Method,文档对象模型)和流模型。流模型中有两种变体——“推”模型(代表为由David Megginson领导的SAX—SimpleAPI for XML用于XML的简单API)和“拉”模型(.NET中的流模型)。

1 “推”模型

“推”模型也就是常说的SAX,SAX是一种靠事件驱动的模型。它每发现一个节点就用“推”模型引发一个事件,而我们必须编写这些事件的处理程序,很麻烦。

2 “拉”模型

.NET中使用的是基于“拉”模型的实现方案。“拉”模型在遍历文档时会把感兴趣的文档部分从读取器重拉出,不需要引发事件,允许我们以编程的方式访问文档,这大大的提高了灵活性,“拉”模型可以选择性的处理节点。在.NET中,“拉”模型通过XML阅读器(XML TextReader类)来实现的。该类提供XML文件读取的功能,他可以验证文档是否格式良好,额如果不是格式良好的XML文档,该类在读取过程中将会抛出XmlException异常。任何时候再内存中子偶当前节点,但它是只读的,向前的,不能再文档中执行向后导航操作。

3 DOM

DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用Xpath查询。但是DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。在.NET中使用XML DOM解析器(XMLDocument)实现DOM模型。

因此,.NET Framework完全支持 XML DOM模式,但它不支持SAX模式。.NET Framework支持两种不同的分析模式XML DOM分析器(XMLDocument类)和XML阅读器(XMLTextReader类),不支持SAX分析器,但这并不意味着它没有提供类似SAX分析器的功能。通过XML阅读器可以将SAX的所有的功能很容易的实现及更有效的应用。

SAX和DOM在实现过程中,分别侧重于不同的方面与满足不同的应用需求。DOM为开发基于XML的应用系统提供了便利。它通过一种随机访问机制,使得应用程序利用该接口可以在任何时候访问XML文档中的任何一部分数据,也可以对XML文档中的数据进行插入、删除、修改、移动等操作。在DOM中,文档的逻辑结构类似一棵树。文档、文档中的根、元素、元素内容、属性、属性值等都是以对象模型的形式表示的。DOM的优点在于它在内存中保存文档的整个模型。这使得能以任何顺序访问XML元素。然而,对于大型文档来说,这样做可能不方便。因为它可能会用尽内存,或者当系统达到了它的极限时,机器的性能将会慢下来。

SAX提供了一种对XML文档进行顺序访问的模式,这是一种快速读写XML数据的方式。SAX接口是事件驱动的,当使用SAX分析器对XML文档进行分析时,就会触发一系列事件,并激活相应的事件处理函数,从而完成对XML文档的访问。SAX处理XML的方式与DOM不同。SAX解析器不是将DOM数解析和表现为输出,它是基于事件的,所以在XML被解析时,事件被发送给引擎。SAX可以在文档的开始接收事件,也可以接收文档中的元素。使用这些事件可以构建一种结构。因为SAX没有把XML文档完全地加载到内存中,所以需要的系统资源较少,是一个分析大型XML文档的高效API。缺点是编写SAX比编写DOM复杂,这因为首先必须实现通知接口并维护状态,其次SAX不允许对文档进行随机访问,也没有提供像DOM那样的修改功能。

比较而言,DOM和SAX各有自己的应用场合。DOM适用于处理下面的问题:解析比较小的XML文件;需要对文档进行修改;需要随机对文档进行访问。SAX适于处理下面的问题:对大型文档进行处理;只需要文档的部分内容;不需要从文档中得到特点信息。

在System.XML名称空间中组织进了以下几个用于XML的类:

1 XMLTextReader—提供以快速、单向、无缓冲的方式存取XML数据。(单向意味着你只能从前往后读取XML文件,而不能逆向读取)

2 XMLValiddatingReader—与XMLTextReader类一起使用,提供验证DTD、XDR和XSD构架的能力。

3  XMLDocument—遵循W3C文档对象模型规范的一级和二级标准,实现XML数据随机的、有缓存的存取。一级水平包含了DOM的最基本的部分,而二级水平增加多种改进,包括增加了对名称空间和级连状图表(CSS)的支持。

4 XMLTextWriter—生成遵循W3C XML1.0规范的XML文件。

转载于:https://www.cnblogs.com/leegiser/archive/2013/04/08/3008458.html

C#解析XML各种方法特点比较(转载)相关推荐

  1. Android解析xml的方法,Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

  2. python解析xml数据_Python解析XML数据方法

    Python在采取数据方面真实相当的简洁和方便,对于个人草根站长来说学一点就已经能很好的把自己想要的功能实现:让自己做一个有技术的SEOER,并不困难,可能很多人没学就开始问学Python要多久,零基 ...

  3. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  4. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

  5. JS解析XML文件和XML字符串

    http://www.cnblogs.com/chjw8016/archive/2011/07/12/2104269.html JS解析XML字符串 <script type='text/jav ...

  6. java解析XML大全(转)

    网上搜了下,解析XML的方法大致有以下几种: XmlIO.Xerces.JDOM.dom4j.XOM.JiBX.KXML.XMLBeans.jConfig.XStream.Piccolo.NanoXM ...

  7. 读取Excel的文本框,除了解析xml还可以用python调用VBA

    作者:小小明 Python读取Excel的文本框 基本需求 今天看到了一个很奇怪的问题,要读取Excel文件的文本框中的文本,例如这种: 本以为openxlpy可以读取,但查看openxlpy官方文档 ...

  8. Android之解析XML总结(SAX、Pull、Dom三种方式)

    常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式.最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),今天对android解析xml的这三种方式进行一 ...

  9. java中document解析jsp,JSP基于dom解析xml实例详解

    本文实例讲述了JSP基于dom解析xml的方法.分享给大家供大家参考,具体如下: 初次学习用dom操作xml文件,有很多不足之处,牛人多给点建议,练习时我没对中文做乱码处理,也没做验证哦!O(∩_∩) ...

最新文章

  1. [Java面试五]Spring总结以及在面试中的一些问题.
  2. 编程的本质探索Nature of Coding
  3. 非常快的文本模式的emacs
  4. Java键盘交互设计输入法,输入法中暖心的交互细节
  5. Java Web 技术栈
  6. 老旗舰华为能用上鸿蒙吗,华为完全开放鸿蒙,未来所有手机都能用鸿蒙系统?...
  7. 如何在矩池云GPU云中安装MATLAB R2017b软件
  8. Hadoop巨头完成合并,成全球第二大开源软件公司!
  9. 在Vue.js中使用Mixin
  10. MacOS壁纸文件夹如何查找
  11. Unity3D视频教程,Unity3D从入门到精通视频教程
  12. 3dmax测试软件自动关闭,打开3dmax出现软件问题导致3dmax意外关闭的两种解决方法...
  13. ffmpeg视频切片方案
  14. 强大的达梦数据库图形界面工具
  15. org.hibernate.QueryException: Unmatched braces for alias path 解决方案
  16. 云原生和云计算的区别介绍
  17. lvds单8转双8芯片_LVDS驱动芯片
  18. 蓝奏云下载地址解析API[直链]
  19. 南阳题目364-田忌赛马
  20. Android实现豆瓣FM的首页效果

热门文章

  1. 解决packet tracer不能复制CLI内容的问题
  2. 【Python-ML】SKlearn库线性回归器LinearRegression
  3. JSP关于Frameset的简单用法
  4. wordpress漏洞_多个WordPress插件SQL注入漏洞分析
  5. jquery中eq和get
  6. c#-检查USB硬件变化
  7. Python 技术篇-用request库调用莉莉机器人api接口实现与机器人对话实例演示
  8. CTFshow php特性 web110
  9. 对序列连续计算平均数和方差
  10. 指向常对象的指针变量