第十章 使用XML.doc_第1页
第十章 使用XML.doc_第2页
第十章 使用XML.doc_第3页
第十章 使用XML.doc_第4页
第十章 使用XML.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十章 使用XML学习目标: 掌握XML的访问接口。 掌握在.NET下DOM的实现。XML:可扩展标记语言(Extensible Markup Language),XML是被用来存储数据、携带数据和交换数据的。10.1 XML访问接口:XML的访问接口目前有两种不同的实现:DOM和SAX。其中DOM在.NET中得到完整的实现并有所扩展,SAX也在.NET中有模拟实现的机制。1. DOM:Document Object Model:文档对象模型,或称“DOM”是来自互联网协会(W3C)的一种交叉语言,用以访问和修改XML文档。DOM可以将XML文档处理成为一种树状的数据结构,或是从客户代码生成这种数据结构。并且提供了一套易读的对象来访问这种数据结构。2. SAX:Simple Application for XML:SAX是另一种处理XML文档内容的方法。10.2 XML文档的树结构:DOM标准将XML文档转换为树型的文档结构,这棵对象树是XML文档内元素之间关系的反映,通过这棵树可以访问和修改XML文档的数据。应用程序可以通过树型模型对XML文档数据进行层次化的访问。文档中的信息包括数据的意义和数据的关系。10.3 .NET的DOM实现:DOM为程序提供了一个遍历操纵和修改XML文档的编程接口。.NET中支持DOM的类主要存在于Systems.Xml和Systems.XML.XmlDocument命名空间中,这些类同样分为两个层次:基础类和扩展类。10.3.1 .NET中的基础XML类:在基础类层次中.NET类库包含了三类。XmlNodeList类用来表示一个节点的有序集合,它提供了对迭代操作和索引器的支持XmlNameNodeMap类用来表示一个节点的集合,该集合中的元素即节点可以使用节点名或索引来访问,支持使用节点名称和迭代器来对属性集合的访问并且包含了对名字空间的支持。XmlNode的属性属性描述Value返回或设置节点的值Attributes返回一个XmlAttributeCollection对象,这个对象包含了节点的所有属性节点ParentNode返回节点的父节点ChildNodes返回一个XmlNodeList对象,该对象包含了这个节点的所有子节点FirstChild返回节点的第一个子节点LastChild返回节点的最后一个子节点HasChildNodes返回一个布尔值该值指明了这个节点是否包含了子节点PreviousSibling返回紧跟着该节点的上一个兄弟节点NextSibling返回紧跟着该节点的下一个兄弟节点InnerXml返回或设置表示该节点及其子节点的标记文本OuterXml返回该节点及其下子节点的标记文本IsReadOnly返回一个布尔值该值指明了该节点是否是只读节点Name返回节点的全名(Qualified NameLocalName返回节点的本地名(Local NamePrefix返回或设置节点的名字空间前缀NodeType返回一个XmlNodeType对象指明该节点的类型XMLNode类的主要成员:PrependChild():将指定节点插入到子节点列表的最前端,返回加入的节点;如果要加入的节点已存在于树中,它首先会被从原位置删除;如果当前节点类型不允许新节点的加入或者新节点是当前节点的祖先节点,则抛出InvalidOperationExceptions异常。AppenChild():用来将一个指定的节点添加到子节点列表的最后。InsertAfter():接受两个同为XmNode类型的节点对象,将第一个对象插入到第二个对象之后,其中第二个对象是该节点的一个子节点。InsertBefore():类似于InsertAfter()方法接受两个XmlNode对象参数,将指定的节点紧跟着插入指定的引用之前。CloneNode():接受一个布尔值参数,该参数为true时递归的复制及诶但本身及其下的所有子节点;为false时仅复制节点本身返回复制出的节点。当该节点不能被复制时会抛出一个InvalidOperationException异常。Clone():相当于调用CloneNode()方法并传参为true。RemoveAll():删除所有子节点和属性节点。RemoveChild():删除传递给该方法的子节点,如果该节点不是当前节点的子节点抛出一个ArgumentException异常。ReplaceChild():用一个节点来替换一个子节点。SelectedNodes():通过指定一个String类型的XPath表达式来选择节点返回一个包含选中节点的XmlNodeList对象。SelectSingleNode():指定一个XPath表达式返回与该表达式匹配的第一个节点。WriterContentTo();将节点的所有子节点写到指定的XmlWriter对象中。WriterTo():将当前节点写到指定的XmlWriter对象中。10.3.2 .NET中的扩展XML类:扩展类层次包含了众多的类,主要的类如下(它们都是由XmlNode类派生出来的):XmlDocument类用来表示XML文档的顶层节点;XmlElement类表示文档中的一个元素对象;XmlAttribute类表示XmlXmlElement对象的一个属性,该属性的合法设值和缺省值信息由DTD或Schema定义;XmlAttributeCollection类表示了Element对象的属性的集合,这些属性的合法值和缺省值信息也同样由DTD或Schema定义;XmlComment类表示XML文档中的注释内容;XMLDeclaration类表示XML的声明节点;XmlDocumentType类表示XML文档中的DOCTYPE声明节点;XmlEntity类表示XML文档中一个解析过或未解析过的实体;XmlEntityReference类表示一个实体引用;XmlText类表示了一个元素或属性的文本内容。10.3.3 使用XmlDocument和其他对象:XmlDocument节点类型是XmlNode的一个派生类,它用来表示一个XML文档对象。XmlDocument的重要属性:DocumentElement属性返回一个XmlElement对象,该对象是该文档的根元素。DocumentType属性返回一个XmlDocument对象,该对象表示了文档中的DOCTYPE声明节点。XmlResolver属性用来设置一个XmlResolver对象,从而可以向文档中装载DTD或外部实体引用。BaseURI属性返回XML文档的位置;NodeType属性被重载为返回XMLNodeType.Document值。XMLDocument类的方法:Load()向XmlDocument对象装载XML数据,可以接受来自Stream对象TextReader对象或XmlReader对象的XML数据也可以接受一个表示XML文件路径和文件名的字符串;LoadedXml()方法则从一个指定的字符串来装载XML文档。Save()将XML保存到特定位置,接受Streaming对象。CreateAttribute()方法创建一个节点XmlAttribute对象,创建对象后使用文档中的某个XmlElement对象的SetAttributeNode()方法来创建的属性赋值给该XmlElement对象表示的元素。CreateComment()方法创建一个XmlComment对象。CreateElement()方法创建一个元素对象使其InnerText属性来设置其内容并使用;AppendChild()方法创建各种类型的节点设置其值和其并将它们插入到DOM树的适当位置上。ImportNode()方法将来自其他对象的节点添加到现有文档中。其他类对象的使用:节点类包括表示元素节点的XmlElement,表示属性的XmlAttribute,表示评注的XmlComment等等,每种节点还具有NodeType属性可以使用,该属性用来判断节点的类型。10.3.4 处理XmlDocument的事件: XmlNode类提供SelectedNodes()和SelectSingleNode()方法。使用这两个方法可以在当前节点为根的子树中选取符合某种条件的节点。10.3.5 处理XmlDocument的事件:XmlDocument对象会触发若干种事件,这些事件主要有:NodeChanging:文档中的某个节点的Value属性将要被改变时可以通过处理该事件来进行额外的检查工作,如果必要可以抛出一个异常来中止操作并将文档对象恢复到原来的状态,该事件只对那些拥有Value属性的节点有用。NodeChanged:当文档中的某个节点的Value属性被改变后触发。NodeInserting:当文档中的某个节点将要被插入到另一个节点中时,可以通过处理该事件来进行额外的检查工作,如果必要可以抛出一个异常来中止插入操作并将文档对象恢复到原来的状态。NodeInserted:当文档中的某个节点插入到另一个节点中后触发。NodeRemoving:当文档中的某个节点将要被从文档删除时,可以通过处理该事件来进行额外的检查工作,如果必要可以抛出一个异常来中止删除操作并将文档对象恢复到原来的状态。NodeRemoved:当文档中的某个节点被删除后触发。这三类事件的类型均是XmlNodeChangedEventHandler。10.4 .NET对XML SAX的模拟:XML还有另外一种标准接口称为SAX接口。SAX的全称是Simple Application for XML。简单是SAX的一大特性,SAX是由事件驱动的。当XML解析器遇到特定的事件时会调用不同的函数来处理,特定事件SAX接口只是调用相应的函数对于数据的处理是函数完成的。SAX对于数据文档的访问是顺序的从文档开始到文档结束,不能随机地访问文档中任意数据,这是因为SAX没有将所有的文档数据放入内存。SAX的优势主要体现在:(1) 当XML文档比较庞大时使用DOM接口会占用大量的内存空间,而SAX接口所需要的空间要小得多,不需要额外的空间。(2) SAX允许在任何情况下中断解析进程。(3) SAX不必解析整个XML文档,然后将所需要的信息返回。(4) 使用DOM接口可使用的只有元素和指令等低级对象而使用SAX可以更高效的创建这样的文档数据结构。在.NET Framework中主要使用XmlReader和XmlWriter两个类来模拟SAX接口数据访问方式。10.4.1 XmlReader和XmlWriter: XmlReader:XmlReader使用一种称为拉模式的方法访问XML文档。推模式是解析器每次独到属性处理指令等内容都要向客户程序通报,然后由客户程序处理这些数据内容。拉模式中解析器只会通报由客户程序指定的数据内容。具体可提供的XmlReader有:(1) XmlTextReader:用程序使用XmlTextReader访问XML数据是比较常用的方法,XmlTextReader不支持DTD和Schema。(2) XmlNodeReader:XmlNodeReader将XML文档解析为DOM树后XmlNodeReader类的实例指针提供对DOM树中XmlNode对象的解析。(3) XmlValidatingReader:XmlValidatingReader的实例指针根据DTD,XSD和XDR检查XML数据类型的有效性,通过ValidationType属性可以决定检查的规则类型。(4) 实现XmlReader创建自定义Reader:可以根据不同的需要编写自己的类或扩展现有的类实现有特殊要求的XML文档数据访问。 XmlReader的作用:10.4.2 其他方法和属性:10.5 XmlWriter的应用(XMLTextWriter):XmlTextWriter是XmlWriter的实现类,提供快速、非缓冲、只进方法的编写器,用以操作XML数据。XmlTextWriter对象包含了很多可用于在创建XML文件时添加元素和属性到XML文件里的方法,比较重要的是:WriteStartDocument():创建XML文件首先就需要用到这个方法,它是在创建XML文件的第一行代码,用来指定该文件XML文件以及设置它的编码类型。WriteStartElement(String):这个方

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论