一、XML 与 DataSet 的关系如下图所示:
二、DataSet 对象的常用方法如下:
A. 使用ReadXml( ) 方法:
从文件或流中加载XML 数据,填充DataSet 对象。DataSet 对象.ReadXML( 文件路径字符串|stream 对象,XmlReadMode 枚举值[可以省略] ) ;
B. 使用WriteXml( ) 方法:
将DataSet 对象中的数据以XML 格式写出到文件或流中。DataSet 对象.WriteXml( 文件路径字符串| stream 对象,XmlWriteMode 枚举值[可以省略] ) ;
C. 使用ReadXmlSchema( ) 方法:
将Shema 模式文件读入DataSet 对象。DataSet 对象.ReadXmlSchema( Stream | FileName | TextReader | XmlReader ) ;
D. 使用WriteXmlSchema( ) 方法:
将DataSet 对象的Shema 模式文件写出到文件或流。DataSet 对象.WriteXmlSchema( Stream | FileName | TextWriter | XmlWriter ) ;
E. 使用GetXmlSchema( ) 方法:
将DataSet 对象的Shema 模式,以字符串的形式获得。DataSet 对象.GetXmlSchema( );
F. 使用GetXml( ) 方法:
将DataSet 对象的XML 格式的数据集,以字符串的形式获得。DataSet 对象.GetXml( );
三、XML与DataSet的相互转换的类
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.IO; using System.Xml; namespace XmlDesign { class XmlDatasetConvert { //将xml对象内容字符串转换为DataSet public static DataSet ConvertXMLToDataSet(string xmlData) { StringReader stream = null; XmlTextReader reader = null; try { DataSet xmlDS = new DataSet(); stream = new StringReader(xmlData); //从stream装载到XmlTextReader reader = new XmlTextReader(stream); xmlDS.ReadXml(reader); return xmlDS; } catch (System.Exception ex) { throw ex; } finally { if (reader != null) reader.Close(); } } //将xml文件转换为DataSet public static DataSet ConvertXMLFileToDataSet(string xmlFile) { StringReader stream = null; XmlTextReader reader = null; try { XmlDocument xmld = new XmlDocument(); xmld.Load(xmlFile); DataSet xmlDS = new DataSet(); stream = new StringReader(xmld.InnerXml); //从stream装载到XmlTextReader reader = new XmlTextReader(stream); xmlDS.ReadXml(reader); //xmlDS.ReadXml(xmlFile); return xmlDS; } catch (System.Exception ex) { throw ex; } finally { if (reader != null) reader.Close(); } } //将DataSet转换为xml对象字符串 public static string ConvertDataSetToXML(DataSet xmlDS) { MemoryStream stream = null; XmlTextWriter writer = null; try { stream = new MemoryStream(); //从stream装载到XmlTextReader writer = new XmlTextWriter(stream,Encoding.Unicode); //用WriteXml方法写入文件. xmlDS.WriteXml(writer); int count = (int)stream.Length; byte[] arr = new byte[count]; stream.Seek(0,SeekOrigin.Begin); stream.Read(arr,count); UnicodeEncoding utf = new UnicodeEncoding(); return utf.GetString(arr).Trim(); } catch (System.Exception ex) { throw ex; } finally { if (writer != null) writer.Close(); } } //将DataSet转换为xml文件 public static void ConvertDataSetToXMLFile(DataSet xmlDS,string xmlFile) { MemoryStream stream = null; XmlTextWriter writer = null; try { stream = new MemoryStream(); //从stream装载到XmlTextReader writer = new XmlTextWriter(stream,count); //返回Unicode编码的文本 UnicodeEncoding utf = new UnicodeEncoding(); StreamWriter sw = new StreamWriter(xmlFile); sw.WriteLine("<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?>"); sw.WriteLine(utf.GetString(arr).Trim()); sw.Close(); } catch( System.Exception ex ) { throw ex; } finally { if (writer != null) writer.Close(); } } } }
</pre><p></p><p><pre name="code" class="csharp"> using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Data; namespace XmlDesign { class Program { static void Main(string[] args) { DataSet ds = new DataSet(); 转换一个XML文件(本地\\网络均可)为一个DataSet#region 转换一个XML文件(本地\\网络均可)为一个DataSet ds = XmlDatasetConvert.ConvertXMLFileToDataSet( @"news。baidu。com/n?cmd=1&class=sportnews&tn=RSS"); Console.WriteLine("数据集名为\\"{0}\\",包含{1}个表",ds.DataSetName,ds.Tables.Count); foreach(DataTable dt in ds.Tables) { PrintTableName(dt.TableName); }; #endregion 构造一个DataSet,并转换为XML字符串 构造一个DataSet,并转换为XML字符串#region 构造一个DataSet,并转换为XML字符串 DataSet ds1 = new DataSet(); DataTable dt1 = new DataTable(); dt1.TableName = "test"; dt1.Columns.Add("id"); dt1.Columns.Add("name"); dt1.Rows.Add("i001","hekui"); dt1.Rows.Add("i002","liyang"); DataTable dt2 = new DataTable(); dt2.TableName = "test1"; dt2.Columns.Add("bookid"); dt2.Columns.Add("bookname"); dt2.Rows.Add("b001","书本1"); dt2.Rows.Add("b002","书本2"); ds1.Tables.Add(dt1); ds1.Tables.Add(dt2); ds1.DataSetName = "方案"; string xmlOut = XmlDatasetConvert.ConvertDataSetToXML(ds1); #endregion 转换一个XML字符串为一个DataSet 转换一个XML字符串为一个DataSet#region 转换一个XML字符串为一个DataSet DataSet ds2 = new DataSet(); ds2 = XmlDatasetConvert.ConvertXMLToDataSet(xmlOut); Console.WriteLine("数据集名为\\"{0}\\",ds2.DataSetName,ds2.Tables.Count); foreach (DataTable dt in ds2.Tables) { PrintTableName(dt.TableName); }; #endregion 转换一个Dataset为一个XML文件 转换一个Dataset为一个XML文件#region 转换一个Dataset为一个XML文件 XmlDatasetConvert.ConvertDataSetToXMLFile(ds2,"c:\\\\adadsda1。xml"); #endregion Console.ReadLine(); } private static void PrintTableName(string tableName) { Console.WriteLine(tableName); } } }