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
{
public
static
DataSet ConvertXMLToDataSet(
string
xmlData)
{
StringReader stream =
null
;
XmlTextReader reader =
null
;
try
{
DataSet xmlDS =
new
DataSet();
stream =
new
StringReader(xmlData);
reader =
new
XmlTextReader(stream);
xmlDS.ReadXml(reader);
return
xmlDS;
}
catch
(System.Exception ex)
{
throw
ex;
}
finally
{
if
(reader !=
null
) reader.Close();
}
}
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);
reader =
new
XmlTextReader(stream);
xmlDS.ReadXml(reader);
return
xmlDS;
}
catch
(System.Exception ex)
{
throw
ex;
}
finally
{
if
(reader !=
null
) reader.Close();
}
}
public
static
string
ConvertDataSetToXML(DataSet xmlDS)
{
MemoryStream stream =
null
;
XmlTextWriter writer =
null
;
try
{
stream =
new
MemoryStream();
writer =
new
XmlTextWriter(stream, Encoding.Unicode);
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();
}
}
public
static
void
ConvertDataSetToXMLFile(DataSet xmlDS,
string
xmlFile)
{
MemoryStream stream =
null
;
XmlTextWriter writer =
null
;
try
{
stream =
new
MemoryStream();
writer =
new
XmlTextWriter(stream, Encoding.Unicode);
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();
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
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);
}
}
}