第十章 使用XML.docx

上传人:b****6 文档编号:4083682 上传时间:2022-11-27 格式:DOCX 页数:7 大小:18.89KB
下载 相关 举报
第十章 使用XML.docx_第1页
第1页 / 共7页
第十章 使用XML.docx_第2页
第2页 / 共7页
第十章 使用XML.docx_第3页
第3页 / 共7页
第十章 使用XML.docx_第4页
第4页 / 共7页
第十章 使用XML.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

第十章 使用XML.docx

《第十章 使用XML.docx》由会员分享,可在线阅读,更多相关《第十章 使用XML.docx(7页珍藏版)》请在冰豆网上搜索。

第十章 使用XML.docx

第十章使用XML

第十章使用XML

学习目标:

✧掌握XML的访问接口。

✧掌握在.NET下DOM的实现。

XML:

可扩展标记语言〔ExtensibleMarkupLanguage〕,XML是被用来存储数据、携带数据和交换数据的。

10.1XML访问接口:

XML的访问接口目前有两种不同的实现:

DOM和SAX。

其中DOM在.NET中得到完整的实现并有所扩展,SAX也在.NET中有模拟实现的机制。

1.DOM:

DocumentObjectModel:

文档对象模型,或称“DOM〞是来自互联网协会〔W3C〕的一种交叉语言,用以访问和修改XML文档。

DOM可以将XML文档处理成为一种树状的数据结构,或是从客户代码生成这种数据结构。

并且提供了一套易读的对象来访问这种数据结构。

2.SAX:

SimpleApplicationforXML:

SAX是另一种处理XML文档内容的方法。

10.2XML文档的树结构:

DOM标准将XML文档转换为树型的文档结构,这棵对象树是XML文档内元素之间关系的反映,通过这棵树可以访问和修改XML文档的数据。

应用程序可以通过树型模型对XML文档数据进行层次化的访问。

文档中的信息包括数据的意义和数据的关系。

10.3.NET的DOM实现:

DOM为程序提供了一个遍历操纵和修改XML文档的编程接口。

.NET中支持DOM的类主要存在于和命名空间中,这些类同样分为两个层次:

根底类和扩展类。

10.3.1.NET中的根底XML类:

在根底类层次中.NET类库包含了三类。

XmlNodeList类用来表示一个节点的有序集合,它提供了对迭代操作和索引器的支持XmlNameNodeMap类用来表示一个节点的集合,该集合中的元素即节点可以使用节点名或索引来访问,支持使用节点名称和迭代器来对属性集合的访问并且包含了对名字空间的支持。

XmlNode的属性

属性

描述

Value

返回或设置节点的值

Attributes

返回一个XmlAttributeCollection对象,这个对象包含了节点的所有属性节点

ParentNode

返回节点的父节点

ChildNodes

返回一个XmlNodeList对象,该对象包含了这个节点的所有子节点

FirstChild

返回节点的第一个子节点

LastChild

返回节点的最后一个子节点

HasChildNodes

返回一个布尔值该值指明了这个节点是否包含了子节点

PreviousSibling

返回紧跟着该节点的上一个兄弟节点

NextSibling

返回紧跟着该节点的下一个兄弟节点

InnerXml

返回或设置表示该节点及其子节点的标记文本

OuterXml

返回该节点及其下子节点的标记文本

IsReadOnly

返回一个布尔值该值指明了该节点是否是只读节点

Name

返回节点的全名〔QualifiedName

LocalName

返回节点的本地名〔LocalName

Prefix

返回或设置节点的名字空间前缀

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对XMLSAX的模拟:

XML还有另外一种标准接口称为SAX接口。

SAX的全称是SimpleApplicationforXML。

简单是SAX的一大特性,SAX是由事件驱动的。

当XML解析器遇到特定的事件时会调用不同的函数来处理,特定事件SAX接口只是调用相应的函数对于数据的处理是函数完成的。

SAX对于数据文档的访问是顺序的从文档开始到文档结束,不能随机地访问文档中任意数据,这是因为SAX没有将所有的文档数据放入内存。

SAX的优势主要表达在:

(1)当XML文档比拟庞大时使用DOM接口会占用大量的内存空间,而SAX接口所需要的空间要小得多,不需要额外的空间。

(2)SAX允许在任何情况下中断解析进程。

(3)SAX不必解析整个XML文档,然后将所需要的信息返回。

(4)使用DOM接口可使用的只有元素和指令等低级对象而使用SAX可以更高效的创立这样的文档数据结构。

在.NETFramework中主要使用XmlReader和XmlWriter两个类来模拟SAX接口数据访问方式。

10.4.1XmlReader和XmlWriter:

10.4.1.1XmlReader:

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文档数据访问。

10.4.1.2XmlReader的作用:

10.4.2其他方法和属性:

10.5XmlWriter的应用〔XMLTextWriter〕:

XmlTextWriter是XmlWriter的实现类,提供快速、非缓冲、只进方法的编写器,用以操作XML数据。

XmlTextWriter对象包含了很多可用于在创立XML文件时添加元素和属性到XML文件里的方法,比拟重要的是:

WriteStartDocument():

创立XML文件首先就需要用到这个方法,它是在创立XML文件的第一行代码,用来指定该文件XML文件以及设置它的编码类型。

WriteStartElement〔String〕:

这个方法的作用是在XML文件中创立新元素,可以通过String参数设置元素的名称。

WriteElementString〔name,text_value〕:

需要创立一个除了字符,什么也没有的〔如不嵌套元素〕的元素。

WriteEndElement():

对应WriteElementString〔String〕方法,作为一个元素的结尾;

WriteEndDocument():

XML文件创立完成后使用该方法结束。

Close():

关闭所有的文件流,把创立的XML文件输出到指定的位置。

10.6演示:

XmlTextWriter应用:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1