当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 详解.NET中的XmlReader与XmlWriter

ASP.NET
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
.NET 常用功能和代码小结
在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出
asp.net IList查询数据后格式化数据再绑定控件
asp.net sql存储过程
asp.net 简单实现禁用或启用页面中的某一类型的控件
asp.net(c#)获取内容第一张图片地址的函数
The remote procedure call failed and did not execute的解决办法
ASP.NET 在线文件管理
asp.net 读取并修改config文件实现代码
ASP.NET Cookie 操作实现
asp.net Silverlight中的模式窗体
Silverlight中动态获取Web Service地址
asp.net Silverlight应用程序中获取载体aspx页面参数
asp.net 水晶报表隔行换色实现方法
asp.net 获取Gridview隐藏列的值
手动把asp.net的类生成dll文件的方法
asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
动态指定任意类型的ObjectDataSource对象的查询参数
asp.net Md5的用法小结

ASP.NET 中的 详解.NET中的XmlReader与XmlWriter


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 90 ::
收藏到网摘: n/a

XML在.NET Framework 中有着重要的作用。如:.NET Framwork 本身的配置文件和源代码文档中使用XML,SOAP、WEB服务和ADO.NET也使用XML。

为了扩展XML,.NET Framwork包含了System.Xml命名空间。这个命名空间带有许多处理XML的类。如,XmlDocument(这是DOM实现方式)类,以及.NET为SAX提供的一种代替品(XmlReader和XmlWriter类)。

XPath和XSLT类,System.Xml.Serialization命名空间中的类从XML文档中创建一个对象(反串行化)。

下表是XML读取和写的类

操作XML有两个方法

一、使用MSXML

MSXML 是XML的分析器,MSXML是一个基于COM的组件,所以需要创建交互操作的程序集。最简单的方法就是在VS 中添加这个COM组件(Microsoft XML,v4.0(或v3.0,v2.6))的引用。这时在引用那一栏中就会出现MSXML2(在导入COM组件是时,为了新程序集提供的命名空间是该COM组件的类型库名)。

二、使用System.Xml类

与msxml类相比,System.Xml类有几个优点。首先,System.Xml是托管代码,使用它可以确保所有的代码都获得安全保护和类型安全性。使用COM交互操作会增加一些开销,但最重要的是,System.Xml命名空间很容易使用,灵活性非常大。

读写流格式的XML

XmlReader提供内存要求不是很高,提供了一种非常迅速、只几前的只读光标来处理XML数据。

XmlWriter可以生成XML文档。

XmlReader和XmlWriter都是抽象类。

派生于XmlReader的类有XmlNodeReader(把XmlNode作为其源,而不是一个流)、XmlValidatingReader(XmlValidatingReader添加了DTD和模式验证,提供数据的有效性验证)、XmlTextReader(与IO命名空间中的TextReader对象一起使用)

XmlTextWriter(与IO命名空间中TextWriter对象一起使用)

1.XmlReader类

XmlReader非常类似于SAX。它们最大的区别是SAX是一种推模型(所有XML数据都必须由应用程序 处理,无论是否需要这些数据),XmlReader是一种拉模型(如果不需要所有的数据,就不需要处理它们)。

如下代码:

richTextBox1.Clear();
XmlReader rdr = XmlReader.Create("book.xml");
while (rdr.Read())
{
if (rdr.NodeType == XmlNodeType.Text)
richTextBox1.AppendText(rdr.Value+"\r\n");
}

(1)使用静态方法Create(),返回一个XmlReader对象。

(2)Read()方法可以进入下一个节点

XmlReader类还可以读取强类型化的数据,它有几个ReadValuesAs方法,如、ReadValueAsDouble、ReadValueAsBoolean等。

检索属性数据

AttributeCountry属性确定属性个数。GetAttribute()方法按照名称或索引来获取属性,如果要一次迭代一个属性就可以使用MoveToFirstAttribute()和MoveToNextAttribute()方法。

如下代码:

richTextBox1.Clear();
XmlReader tr = XmlReader.Create("book.xml");
while (tr.Read())
{
if (tr.NodeType == XmlNodeType.Element)
{
for (int i = 0; i < tr.AttributeCount; i++)
{
richTextBox1.AppendText(tr.GetAttribute(i)+"\r\n");
}
}
}

使用XmlReader类进行验证

有时不但要知道文档的格式是规范的,还是确定文档是有效的。

XmlReader可以使用XmlReaderSettings,根据XSD模式验证XML。XSD模式添加到XMLSchemaSet中,通过Schema属性可以访问XMLSchemaSet。XsdValidate属性还必须设置为ture,这个属性默认为flase.

XmlWriter类可以把Xml写入一个流、文件、StringBuilder、TextWriter或另一个XmlWriter对象中。与XmlReader一样,XmlWriter类以只向前、未缓存的方式 进行写入。

 

使用XmlWirterSettings对旬进行是否缩进文本、缩进量等配置。

如下代码:

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true; //是否缩进
settings.NewLineOnAttributes = true;  //把每个属性写在一行,这样做可以更容易读取XML
XmlWriter writer = XmlWriter.Create("booknew.xml",settings);
writer.WriteStartDocument();
writer.WriteStartElement("book");
writer.WriteAttributeString("genre","Mystery");
writer.WriteAttributeString("publicationdate","2001");
writer.WriteAttributeString("ISBN","123456489");
writer.WriteElementString("title","Case of the Money");
writer.WriteStartElement("author");
writer.WriteElementString("name","Cookie Monster");
writer.WriteEndElement();
writer.WriteElementString("price","9.99");      
writer.WriteEndDocument();
writer.Flush();
writer.Close();

1.使用XmlWriterSettings实例对象进行生成的XML的设置。

2.使用Create(),返回一个XmlWriter对象,其中Create(),第一个参数为Xml的名字,第二个参数为XmlWriterSettings实例对象。

3.使用WriterStartDocument()中文档声明,开始写入数据,以WriteEndDocument()结束。注间控制元素的嵌套,注注意WriterStartElement()和WriterEndElement()的调用与位置。

4.还有一些专用的写入方法。WriteCData()可以输出一个CData部分(),WriterComment()以正确的XML格式写入注释。WriteChae()写入字符缓冲区的内容。