• C#解析XML的特点比较和总结


    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文件。

    基本使用方法:

     
    1)XmlDocument:加载xml文档
    例:XmlDocument document = new XmlDocument();
        document.load(@"D:\C#\books.xml");
    (2)XmlElement:用于返回一个元素实例
       XmlElement element = document.DocumentElement; //常用来返回一个根节点
       XmlElement类包含许多方法和属性,可以处理树的节点和属性
       1)FirstChild:返回根元素节点后的第一个子节点
       2)LastChild:返回根元素节点后的最后一个子节点
       3)ParentNode:返回当前元素的父节点
       4)NextSibling:返回当前节点的父节点下的下一个节点
       5)HasChildNodes:用来检查当前元素是否有子元素
    (3)XmlText:表示开关标记之间的文本,是特殊的节点,属性有:
       1)InnerText:获取当前节点范围内的所有子节点的文本连接起来的字符串
       2)InnerXml:获取当前节点范围内的所有子节点的文本连接起来的字符串,包含标记
    5.XML修改解析
     (1)创建节点

       创建节点方法:
       1)CreateElement:用来创建XmlDocument类型的节点
       2)CreateAttribute:用来创建XmlAttribute类型的节点
       3)CreateTextNode:用来创建XmlTextNode类型的节点
       4)CreateNode:用来创建任意类型的节点,包含上述三种以及其他
       创建节点后添加操作:
       1)AppendChild:把创建的节点类型追加到XmlNode类型或其他派生类型的节点后
       2)InsertAfter:将新节点插入到特定的位置
       3)InsertBefore:将新节点插入到特定位置
     (2)删除节点
      1)RemoveChild:删除当前节点范围内的一个指定的子节点
      2)RemoveAll:删除该节点范围内的所有子节点
     (3)修改节点
      1)ReplaceChild:用新子节点替换旧子节点
    6.XML查询解析
     (1)使用XmlDocument 方法

       XmlDocument document = new XmlDocument();
       document.Load(filePath);
       XmlNodeList list = document.GetElementsByTagName("book");
       foreach (XmlNode node in list) 
       {
         listBox1.Items.Add(node.Name);//listBox1类型是ListBox
       }
     (2)使用XPath选择特定的节点的方法
      1)SelectSingleNode:用来选择一个节点,如果有多个,则返回第一个节点
      2)SelectNodes:返回一个节点的集合,类型是XmlNodesList
     选择特定的节点的方法参数XPath
      XPath是XML文档的查询语言
  • 相关阅读:
    JPA 系列教程1-环境搭建
    微信企业号接收消息(使用SpringMVC)
    oracle xe 数据库用户操作
    eclipse快捷键
    堆和栈的区别(重要)
    synchronized的4种用法
    servlet匹配规则和顺序
    JAVA中的枚举
    JSON对象操作
    Handler
  • 原文地址:https://www.cnblogs.com/findchance/p/2670257.html
Copyright © 2020-2023  润新知