XML与DataSet的相互转换
XmlDatasetConvert 该类提供了四种方法:
1、将xml对象内容字符串转换为DataSet
2、将xml文件转换为DataSet
3、将DataSet转换为xml对象字符串
4、将DataSet转换为xml文件
1 //XmlDatasetConvert.cs
2
3 using System;
4 using System.Collections.Generic;
5 using System.Text;
6 using System.Data;
7 using System.IO;
8 using System.Xml;
9
10 namespace XmlDesign
11 {
12 class XmlDatasetConvert
13 {
14 //将xml对象内容字符串转换为DataSet
15 public static DataSet ConvertXMLToDataSet(string xmlData)
16 {
17 StringReader stream = null;
18 XmlTextReader reader = null;
19 try
20 {
21 DataSet xmlDS = new DataSet();
22 stream = new StringReader(xmlData);
23 //从stream装载到XmlTextReader
24 reader = new XmlTextReader(stream);
25 xmlDS.ReadXml(reader);
26 return xmlDS;
27 }
28 catch (System.Exception ex)
29 {
30 throw ex;
31 }
32 finally
33 {
34 if (reader != null) reader.Close();
35 }
36 }
37
38 //将xml文件转换为DataSet
39 public static DataSet ConvertXMLFileToDataSet(string xmlFile)
40 {
41 StringReader stream = null;
42 XmlTextReader reader = null;
43 try
44 {
45 XmlDocument xmld = new XmlDocument();
46 xmld.Load(xmlFile);
47
48 DataSet xmlDS = new DataSet();
49 stream = new StringReader(xmld.InnerXml);
50 //从stream装载到XmlTextReader
51 reader = new XmlTextReader(stream);
52 xmlDS.ReadXml(reader);
53 //xmlDS.ReadXml(xmlFile);
54 return xmlDS;
55 }
56 catch (System.Exception ex)
57 {
58 throw ex;
59 }
60 finally
61 {
62 if (reader != null) reader.Close();
63 }
64 }
65
66 //将DataSet转换为xml对象字符串
67 public static string ConvertDataSetToXML(DataSet xmlDS)
68 {
69 MemoryStream stream = null;
70 XmlTextWriter writer = null;
71
72 try
73 {
74 stream = new MemoryStream();
75 //从stream装载到XmlTextReader
76 writer = new XmlTextWriter(stream, Encoding.Unicode);
77
78 //用WriteXml方法写入文件.
79 xmlDS.WriteXml(writer);
80 int count = (int)stream.Length;
81 byte[] arr = new byte[count];
82 stream.Seek(0, SeekOrigin.Begin);
83 stream.Read(arr, 0, count);
84
85 UnicodeEncoding utf = new UnicodeEncoding();
86 return utf.GetString(arr).Trim();
87 }
88 catch (System.Exception ex)
89 {
90 throw ex;
91 }
92 finally
93 {
94 if (writer != null) writer.Close();
95 }
96 }
97
98 //将DataSet转换为xml文件
99 public static void ConvertDataSetToXMLFile(DataSet xmlDS,string xmlFile)
100 {
101 MemoryStream stream = null;
102 XmlTextWriter writer = null;
103
104 try
105 {
106 stream = new MemoryStream();
107 //从stream装载到XmlTextReader
108 writer = new XmlTextWriter(stream, Encoding.Unicode);
109
110 //用WriteXml方法写入文件.
111 xmlDS.WriteXml(writer);
112 int count = (int)stream.Length;
113 byte[] arr = new byte[count];
114 stream.Seek(0, SeekOrigin.Begin);
115 stream.Read(arr, 0, count);
116
117 //返回Unicode编码的文本
118 UnicodeEncoding utf = new UnicodeEncoding();
119 StreamWriter sw = new StreamWriter(xmlFile);
120 sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
121 sw.WriteLine(utf.GetString(arr).Trim());
122 sw.Close();
123 }
124 catch( System.Exception ex )
125 {
126 throw ex;
127 }
128 finally
129 {
130 if (writer != null) writer.Close();
131 }
132 }
133
134 }
135 }
136 //使用示例
137
138 using System;
139 using System.Collections.Generic;
140 using System.Text;
141 using System.Xml;
142 using System.Data;
143
144 namespace XmlDesign
145 {
146 class Program
147 {
148 static void Main(string[] args)
149 {
150 DataSet ds = new DataSet();
151
152 //转换一个XML文件(本地\网络均可)为一个DataSet
153 #region 转换一个XML文件(本地\网络均可)为一个DataSet
154 //http://news.baidu.com/n?cmd=1&class=sportnews&tn=rss
155 //F:\study\001CSharp_Study\002Source\XmlDesign\XmlDesign\Save_Plan.xml
156 ds = XmlDatasetConvert.ConvertXMLFileToDataSet(@"c:\\adadsda1.xml");
157 Console.WriteLine("数据集名为\"{0}\",包含{1}个表", ds.DataSetName, ds.Tables.Count);
158 foreach(DataTable dt in ds.Tables)
159 {
160 PrintTableName(dt.TableName);
161 };
162 #endregion
163
164 //构造一个DataSet,并转换为XML字符串
165 #region 构造一个DataSet,并转换为XML字符串
166 DataSet ds1 = new DataSet();
167 DataTable dt1 = new DataTable();
168 dt1.TableName = "test";
169 dt1.Columns.Add("id");
170 dt1.Columns.Add("name");
171 dt1.Rows.Add("i001", "hekui");
172 dt1.Rows.Add("i002", "liyang");
173
174 DataTable dt2 = new DataTable();
175 dt2.TableName = "test1";
176 dt2.Columns.Add("bookid");
177 dt2.Columns.Add("bookname");
178 dt2.Rows.Add("b001", "书本1");
179 dt2.Rows.Add("b002", "书本2");
180
181 ds1.Tables.Add(dt1);
182 ds1.Tables.Add(dt2);
183 ds1.DataSetName = "方案";
184 string xmlOut = XmlDatasetConvert.ConvertDataSetToXML(ds1);
185 #endregion
186
187 //转换一个XML字符串为一个DataSet
188 #region 转换一个XML字符串为一个DataSet
189 DataSet ds2 = new DataSet();
190 ds2 = XmlDatasetConvert.ConvertXMLToDataSet(xmlOut);
191 Console.WriteLine("数据集名为\"{0}\",包含{1}个表", ds2.DataSetName, ds2.Tables.Count);
192 foreach (DataTable dt in ds2.Tables)
193 {
194 PrintTableName(dt.TableName);
195 };
196 #endregion
197
198 //转换一个Dataset为一个XML文件
199 #region 转换一个Dataset为一个XML文件
200 XmlDatasetConvert.ConvertDataSetToXMLFile(ds2, "c:\\adadsda1.xml");
201 #endregion
202
203 Console.ReadLine();
204 }
205
206 private static void PrintTableName(string tableName)
207 {
208 Console.WriteLine(tableName);
209 }
210 }
211 }