XML與DataSet的相互轉(zhuǎn)換類

字號(hào):


    送給大家一個(gè)XML與DataSet的相互轉(zhuǎn)換的類:
    XmlDatasetConvert 該類提供了四種方法:
    1、將xml對(duì)象內(nèi)容字符串轉(zhuǎn)換為DataSet
    2、將xml文件轉(zhuǎn)換為DataSet
    3、將DataSet轉(zhuǎn)換為xml對(duì)象字符串
    4、將DataSet轉(zhuǎn)換為xml文件
    XmlDatasetConvert.cs
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.IO;
    using System.Xml;
    namespace XmlDesign
    {
    class XmlDatasetConvert
    {
    //將xml對(duì)象內(nèi)容字符串轉(zhuǎn)換為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文件轉(zhuǎn)換為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轉(zhuǎn)換為xml對(duì)象字符串
    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, 0, count);
    UnicodeEncoding utf = new UnicodeEncoding();
    return utf.GetString(arr).Trim();
    }
    catch (System.Exception ex)
    {
    throw ex;
    }
    finally
    {
    if (writer != null) writer.Close();
    }
    }
    //將DataSet轉(zhuǎn)換為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, Encoding.Unicode);
    //用WriteXml方法寫入文件.
    xmlDS.WriteXml(writer);
    int count = (int)stream.Length;
    byte[] arr = new byte[count];
    stream.Seek(0, SeekOrigin.Begin);
    stream.Read(arr, 0, count);
    //返回Unicode編碼的文本
    UnicodeEncoding utf = new UnicodeEncoding();
    StreamWriter sw = new StreamWriter(xmlFile);
    sw.WriteLine("");
    sw.WriteLine(utf.GetString(arr).Trim());
    sw.Close();
    }
    catch( System.Exception ex )
    {
    throw ex;
    }
    finally
    {
    if (writer != null) writer.Close();
    }
    }
    }
    }
    使用示例
    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();
    轉(zhuǎn)換一個(gè)XML文件(本地/網(wǎng)絡(luò)均可)為一個(gè)DataSet#region 轉(zhuǎn)換一個(gè)XML文件(本地/網(wǎng)絡(luò)均可)為一個(gè)DataSet
    //http://news.baidu.com/n?cmd=1&class=sportnews&tn=rss
    //F:/study/001CSharp_Study/002Source/XmlDesign/XmlDesign/Save_Plan.xml
    ds = XmlDatasetConvert.ConvertXMLFileToDataSet(@"http://news.baidu.com/n?cmd=1&class=sportnews&tn=rss");
    Console.WriteLine("數(shù)據(jù)集名為/"{0}/",包含{1}個(gè)表", ds.DataSetName, ds.Tables.Count);
    foreach(DataTable dt in ds.Tables)
    {
    PrintTableName(dt.TableName);
    };
    #endregion
    構(gòu)造一個(gè)DataSet,并轉(zhuǎn)換為XML字符串#region 構(gòu)造一個(gè)DataSet,并轉(zhuǎn)換為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
    轉(zhuǎn)換一個(gè)XML字符串為一個(gè)DataSet#region 轉(zhuǎn)換一個(gè)XML字符串為一個(gè)DataSet
    DataSet ds2 = new DataSet();
    ds2 = XmlDatasetConvert.ConvertXMLToDataSet(xmlOut);
    Console.WriteLine("數(shù)據(jù)集名為/"{0}/",包含{1}個(gè)表", ds2.DataSetName, ds2.Tables.Count);
    foreach (DataTable dt in ds2.Tables)
    {
    PrintTableName(dt.TableName);
    };
    #endregion
    轉(zhuǎn)換一個(gè)Dataset為一個(gè)XML文件#region 轉(zhuǎn)換一個(gè)Dataset為一個(gè)XML文件
    XmlDatasetConvert.ConvertDataSetToXMLFile(ds2, "c://adadsda1.xml");
    #endregion
    Console.ReadLine();
    }
    private static void PrintTableName(string tableName)
    {
    Console.WriteLine(tableName);
    }
    }
    }