XmlDatasetConvert 該類提供了四種方法:
1、将xml對象内容字元串轉換為DataSet
2、将xml檔案轉換為DataSet
3、将DataSet轉換為xml對象字元串
4、将DataSet轉換為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對象内容字元串轉換為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, 0, 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, 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("<?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();
}
}
}
}
使用示例
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
//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("資料集名為\"{0}\",包含{1}個表", ds.DataSetName, ds.Tables.Count);
foreach(DataTable dt in ds.Tables)
{
PrintTableName(dt.TableName);
};
#endregion
構造一個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#region 轉換一個XML字元串為一個DataSet
DataSet ds2 = new DataSet();
ds2 = XmlDatasetConvert.ConvertXMLToDataSet(xmlOut);
Console.WriteLine("資料集名為\"{0}\",包含{1}個表", ds2.DataSetName, ds2.Tables.Count);
foreach (DataTable dt in ds2.Tables)
{
PrintTableName(dt.TableName);
};
#endregion
轉換一個Dataset為一個XML檔案#region 轉換一個Dataset為一個XML檔案
XmlDatasetConvert.ConvertDataSetToXMLFile(ds2, "c:\\adadsda1.xml");
#endregion
Console.ReadLine();
}
private static void PrintTableName(string tableName)
{
Console.WriteLine(tableName);
}
}
}
---------------------------------new
public static string SerializeDataTableXml(DataTable pDt, string pRoot, string pTag)
{
try
{
int strColCount = pDt.Columns.Count;
DataColumnCollection dcc = pDt.Columns;