2024年3月31日发(作者:)

数据集DataSet读写XML文件

在.NET Framework中,经常使用XML作为存储和传输各种数据的格式。对XML提

供了强大的支持,其主要是通过数据集DataSet与XML进行交互的。DataSet中提供了很多方法来支

持对XML的操作,如下表所示:

GetXml()

GetXmlSchema()

InferXmlSchema()

ReadXml()

ReadXmlSchema()

WriteXml()

返回存储在DataSet中的数据的XML形式

返回存储在DataSet中的数据的XML形式的XML架构

将指定文件中的XML架构应用于DataSet

将XML架构和数据读入到DataSet

将XML架构读入到DataSet

将DataSet中的数据写入到指定的文件,还可以通过选择

参数WriteSchema将架构一起写入

现主要介绍

数据集DataSet读

写XML的方法:

ReadXml()方法、

WriteXml()方法、

ReadXmlSchema()

方法、

WriteXmlSchema()

方法。

1.

ReadXml()方

WriteXmlSchema()

将XML架构形式的DataSet结构写入到指定文件

ReadXml()方法可以将

XML

架构和数据读入到数据集DataSet中。该方法重载时根据参数的多少

可以分为两组,第一组中仅包含一个参数,此参数可以是作为读取源的文件名或路径、Stream类派生

的对象、TextReader类派生的对象、XmlReader类派生的对象。其形式是:ReadXml(String)、

ReadXml(Stream)、ReadXml(TextReader)、ReadXml(XmlReader)。第二组中包含两个参数,其中一个

参数和上述相同,另外一个参数是指定如何将

XML架构和数据读DataSet的参数XmlReadMode。在

VS2010开发环境中,该参数是以枚举类定义存在的,其枚举声明代码如下:

public enum XmlReadMode

{

Auto = 0,

ReadSchema = 1,

IgnoreSchema = 2,

InferSchema = 3,

DiffGram = 4,

Fragment = 5,

InferTypedSchema = 6,

}

其取不同值时会进行不同的操作,列举如下:

Auto:默认设置,执行最适合的操作。

ReadSchema:读取任何内联架构并加载数据。如果DataSet已经包含架构,则可以将新表添加到

架构中,但是如果内联架构中的任何表在DataSet中已经存在,则会引发异常。

IgnoreSchema:忽略任何内联架构并将数据读入现有的DataSet。如果任何的数据与现有的架构

不匹配,就会将这些数据丢弃(包括为DataSet定义的不同命名空间中的数据)。如果数据是

DiffGram,IgnoreSchema与DiffGram具有相同的功能。

InferSchema:忽略任何内联架构,从数据推断出架构并加载数据。如果DataSet已经包含架构,

就通过添加新表或者向现有的表添加列,来扩展当前架构。如果推断的表已经存在但是具有不同

的命名空间,或者如果推断的列中有一些与现有的列冲突,则会发生异常。

DiffGram:读取DiffGram,将DiffGram中的更改应用到DataSet。语义与(DataSet)

操作的语义相同。与(DataSet)

操作一样,保留te值。向

l(XmlReader)

的DiffGram

输入只能使用ml(Stream)中的

DiffGram

输出来获得。

Fragment:针对SQL Server

的实例读取XML片段(例如,通过执行FOR XML

查询生成的XML

片段)。当XmlReadMode设置为Fragment

时,默认命名空间作为内联架构来读取。

InferTypedSchema:忽略任何内联架构,从数据推断出强类型架构并加载数据。如果无法从数据

推断出类型,则会将其解释为字符串数据。如果DataSet已经包含架构,就通过添加新表或者通

过向现有的表中添加列来扩展当前架构。如果推断的表已经存在但是具有不同的命名空间,或者

如果推断的列中有一些与现有的列冲突,则会引发异常。

故第二组方法形式是:ReadXml(String,XmlReadMode)、ReadXml(Stream,XmlReadMode)、

ReadXml(TextReader,XmlReadMode)、ReadXml(XmlReader,XmlReadMode)。

2.

WriteXml()方法

WriteXml()方法的情形如同ReadXml()方法,其亦可分为两组,第一组方法形式是:WriteXml

(String)、WriteXml (Stream)、WriteXml(TextWriter)、WriteXml (XmlWriter)。第二组方法形式是:

WriteXml (String,XmlWriteMode)、WriteXml (Stream,XmlWriteMode)、WriteXml (TextWriter,

XmlWriteMode)、WriteXml (XmlWriter,XmlWriteMode)。对于参数XmlWriteMode其枚举声明形式

为:

public enum XmlWriteMode

{

WriteSchema = 0,

IgnoreSchema = 1,

DiffGram = 2,

}

其枚举成员不相同时其操作如下:

WriteSchema:以XML数据形式写入DataSet的当前内容,以关系结构作为内联XSD架构。如

果DataSet只有架构而无数据,那么只写入内联架构。如果DataSet没有当前架构,则不写入任何

内容。

IgnoreSchema:以XML数据形式写入DataSet的当前内容,不带XSD架构。如果无数据加载到

DataSet中,则不写入任何内容。

DiffGram:作为DiffGram写入整个DataSet,包括原始值和当前值。若要生成只包含已更改的值

的DiffGram,请调用nges(),然后在返回的DataSet

上作为DiffGram调用

ml(Stream)。

3.

ReadXml()方法/WriteXml()方法核心代码

3.1

ReadXml(String)/WriteXml(String)方法:

*******************************

DataSet ds = new DataSet();

string fileName = "C:";

l(C:);

………………………………………..

ml(C:);

*******************************

3.2

ReadXml(Stream)/WriteXml(Stream)方法: