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)方法:
发布评论