生活随笔
收集整理的这篇文章主要介绍了
XML与DataSet的相互转换
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
from:http://www.cnblogs.com/guoerzzf/archive/2009/04/09/1432668.html
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(); #region 转换一个XML文件(本地\网络均可)为一个DataSet 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 #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 #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 #region 转换一个Dataset为一个XML文件 XmlDatasetConvert.ConvertDataSetToXMLFile(ds2, "c:\\adadsda1.xml"); #endregion Console.ReadLine(); } private static void PrintTableName(string tableName) { Console.WriteLine(tableName); } }}
总结
以上是生活随笔为你收集整理的XML与DataSet的相互转换的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。