送給大家一個(gè)XML與DataSet的相互轉(zhuǎn)換的類(lèi):
XmlDatasetConvert 該類(lèi)提供了四種方法:
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方法寫(xiě)入文件.
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方法寫(xiě)入文件.
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(@"
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", "書(shū)本1"); dt2.Rows.Add("b002", "書(shū)本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); } } } 更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄