XML与DataTable/DataSet互转(C#) 把数据库中表的内容转存为XML文件

前端之家收集整理的这篇文章主要介绍了XML与DataTable/DataSet互转(C#) 把数据库中表的内容转存为XML文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. public class DataToXml
  2. {
  3. /**//// <summary>
  4. /// 将DataTable对象转换成XML字符串
  5. /// </summary>
  6. /// <param name="dt">DataTable对象</param>
  7. /// <returns>XML字符串</returns>
  8. public static string CDataToXml(DataTable dt)
  9. {
  10. if (dt != null)
  11. {
  12. MemoryStream ms = null;
  13. XmlTextWriter XmlWt = null;
  14. try
  15. {
  16. ms = new MemoryStream();
  17. //根据ms实例化XmlWt
  18. XmlWt = new XmlTextWriter(ms,Encoding.Unicode);
  19. //获取ds中的数据
  20. dt.WriteXml(XmlWt);
  21. int count = (int)ms.Length;
  22. byte[] temp = new byte[count];
  23. ms.Seek(0,SeekOrigin.Begin);
  24. ms.Read(temp,count);
  25. //返回Unicode编码的文本
  26. UnicodeEncoding ucode = new UnicodeEncoding();
  27. string returnValue = ucode.GetString(temp).Trim();
  28. return returnValue;
  29. }
  30. catch (System.Exception ex)
  31. {
  32. throw ex;
  33. }
  34. finally
  35. {
  36. //释放资源
  37. if (XmlWt != null)
  38. {
  39. XmlWt.Close();
  40. ms.Close();
  41. ms.Dispose();
  42. }
  43. }
  44. }
  45. else
  46. {
  47. return "";
  48. }
  49. }
  50. /**//// <summary>
  51. /// 将DataSet对象中指定的Table转换成XML字符串
  52. /// </summary>
  53. /// <param name="ds">DataSet对象</param>
  54. /// <param name="tableIndex">DataSet对象中的Table索引</param>
  55. /// <returns>XML字符串</returns>
  56. public static string CDataToXml(DataSet ds,int tableIndex)
  57. {
  58. if (tableIndex != -1)
  59. {
  60. return CDataToXml(ds.Tables[tableIndex]);
  61. }
  62. else
  63. {
  64. return CDataToXml(ds.Tables[0]);
  65. }
  66. }
  67. /**//// <summary>
  68. /// 将DataSet对象转换成XML字符串
  69. /// </summary>
  70. /// <param name="ds">DataSet对象</param>
  71. /// <returns>XML字符串</returns>
  72. public static string CDataToXml(DataSet ds)
  73. {
  74. return CDataToXml(ds,-1);
  75. }
  76. /**//// <summary>
  77. /// 将DataView对象转换成XML字符串
  78. /// </summary>
  79. /// <param name="dv">DataView对象</param>
  80. /// <returns>XML字符串</returns>
  81. public static string CDataToXml(DataView dv)
  82. {
  83. return CDataToXml(dv.Table);
  84. }
  85. /**//// <summary>
  86. /// 将DataSet对象数据保存为XML文件
  87. /// </summary>
  88. /// <param name="dt">DataSet</param>
  89. /// <param name="xmlFilePath">XML文件路径</param>
  90. /// <returns>bool值</returns>
  91. public static bool CDataToXmlFile(DataTable dt,string xmlFilePath)
  92. {
  93. if ((dt != null) && (!string.IsNullOrEmpty(xmlFilePath)))
  94. {
  95. string path = HttpContext.Current.Server.MapPath(xmlFilePath);
  96. MemoryStream ms = null;
  97. XmlTextWriter XmlWt = null;
  98. try
  99. {
  100. ms = new MemoryStream();
  101. //根据ms实例化XmlWt
  102. XmlWt = new XmlTextWriter(ms,count);
  103. //返回Unicode编码的文本
  104. UnicodeEncoding ucode = new UnicodeEncoding();
  105. //写文件
  106. StreamWriter sw = new StreamWriter(path);
  107. sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
  108. sw.WriteLine(ucode.GetString(temp).Trim());
  109. sw.Close();
  110. return true;
  111. }
  112. catch (System.Exception ex)
  113. {
  114. throw ex;
  115. }
  116. finally
  117. {
  118. //释放资源
  119. if (XmlWt != null)
  120. {
  121. XmlWt.Close();
  122. ms.Close();
  123. ms.Dispose();
  124. }
  125. }
  126. }
  127. else
  128. {
  129. return false;
  130. }
  131. }
  132. /**//// <summary>
  133. /// 将DataSet对象中指定的Table转换成XML文件
  134. /// </summary>
  135. /// <param name="ds">DataSet对象</param>
  136. /// <param name="tableIndex">DataSet对象中的Table索引</param>
  137. /// <param name="xmlFilePath">xml文件路径</param>
  138. /// <returns>bool]值</returns>
  139. public static bool CDataToXmlFile(DataSet ds,int tableIndex,string xmlFilePath)
  140. {
  141. if (tableIndex != -1)
  142. {
  143. return CDataToXmlFile(ds.Tables[tableIndex],xmlFilePath);
  144. }
  145. else
  146. {
  147. return CDataToXmlFile(ds.Tables[0],xmlFilePath);
  148. }
  149. }
  150. /**//// <summary>
  151. /// 将DataSet对象转换成XML文件
  152. /// </summary>
  153. /// <param name="ds">DataSet对象</param>
  154. /// <param name="xmlFilePath">xml文件路径</param>
  155. /// <returns>bool]值</returns>
  156. public static bool CDataToXmlFile(DataSet ds,string xmlFilePath)
  157. {
  158. return CDataToXmlFile(ds,-1,xmlFilePath);
  159. }
  160. /**//// <summary>
  161. /// 将DataView对象转换成XML文件
  162. /// </summary>
  163. /// <param name="dv">DataView对象</param>
  164. /// <param name="xmlFilePath">xml文件路径</param>
  165. /// <returns>bool]值</returns>
  166. public static bool CDataToXmlFile(DataView dv,string xmlFilePath)
  167. {
  168. return CDataToXmlFile(dv.Table,xmlFilePath);
  169. }
  170. }
  171.  
  172.  
  173. /**//// <summary>
  174. /// XML形式的字符串、XML文江转换成DataSet、DataTable格式
  175. /// </summary>
  176. public class XmlToData
  177. {
  178. /**//// <summary>
  179. /// 将Xml内容字符串转换成DataSet对象
  180. /// </summary>
  181. /// <param name="xmlStr">Xml内容字符串</param>
  182. /// <returns>DataSet对象</returns>
  183. public static DataSet CXmlToDataSet(string xmlStr)
  184. {
  185. if (!string.IsNullOrEmpty(xmlStr))
  186. {
  187. StringReader StrStream = null;
  188. XmlTextReader Xmlrdr = null;
  189. try
  190. {
  191. DataSet ds = new DataSet();
  192. //读取字符串中的信息
  193. StrStream = new StringReader(xmlStr);
  194. //获取StrStream中的数据
  195. Xmlrdr = new XmlTextReader(StrStream);
  196. //ds获取Xmlrdr中的数据
  197. ds.ReadXml(Xmlrdr);
  198. return ds;
  199. }
  200. catch (Exception e)
  201. {
  202. throw e;
  203. }
  204. finally
  205. {
  206. //释放资源
  207. if (Xmlrdr != null)
  208. {
  209. Xmlrdr.Close();
  210. StrStream.Close();
  211. StrStream.Dispose();
  212. }
  213. }
  214. }
  215. else
  216. {
  217. return null;
  218. }
  219. }
  220. /**//// <summary>
  221. /// 将Xml字符串转换成DataTable对象
  222. /// </summary>
  223. /// <param name="xmlStr">Xml字符串</param>
  224. /// <param name="tableIndex">Table表索引</param>
  225. /// <returns>DataTable对象</returns>
  226. public static DataTable CXmlToDatatTable(string xmlStr,int tableIndex)
  227. {
  228. return CXmlToDataSet(xmlStr).Tables[tableIndex];
  229. }
  230. /**//// <summary>
  231. /// 将Xml字符串转换成DataTable对象
  232. /// </summary>
  233. /// <param name="xmlStr">Xml字符串</param>
  234. /// <returns>DataTable对象</returns>
  235. public static DataTable CXmlToDatatTable(string xmlStr)
  236. {
  237. return CXmlToDataSet(xmlStr).Tables[0];
  238. }
  239. /**//// <summary>
  240. /// 读取Xml文件信息,并转换成DataSet对象
  241. /// </summary>
  242. /// <remarks>
  243. /// DataSet ds = new DataSet();
  244. /// ds = CXmlFileToDataSet("/XML/upload.xml");
  245. /// </remarks>
  246. /// <param name="xmlFilePath">Xml文件地址</param>
  247. /// <returns>DataSet对象</returns>
  248. public static DataSet CXmlFileToDataSet(string xmlFilePath)
  249. {
  250. if (!string.IsNullOrEmpty(xmlFilePath))
  251. {
  252. string path = HttpContext.Current.Server.MapPath(xmlFilePath);
  253. StringReader StrStream = null;
  254. XmlTextReader Xmlrdr = null;
  255. try
  256. {
  257. XmlDocument xmldoc = new XmlDocument();
  258. //根据地址加载Xml文件
  259. xmldoc.Load(path);
  260.  
  261. DataSet ds = new DataSet();
  262. //读取文件中的字符流
  263. StrStream = new StringReader(xmldoc.InnerXml);
  264. //获取StrStream中的数据
  265. Xmlrdr = new XmlTextReader(StrStream);
  266. //ds获取Xmlrdr中的数据
  267. ds.ReadXml(Xmlrdr);
  268. return ds;
  269. }
  270. catch (Exception e)
  271. {
  272. throw e;
  273. }
  274. finally
  275. {
  276. //释放资源
  277. if (Xmlrdr != null)
  278. {
  279. Xmlrdr.Close();
  280. StrStream.Close();
  281. StrStream.Dispose();
  282. }
  283. }
  284. }
  285. else
  286. {
  287. return null;
  288. }
  289. }
  290. /**//// <summary>
  291. /// 读取Xml文件信息,并转换成DataTable对象
  292. /// </summary>
  293. /// <param name="xmlFilePath">xml文江路径</param>
  294. /// <param name="tableIndex">Table索引</param>
  295. /// <returns>DataTable对象</returns>
  296. public static DataTable CXmlToDataTable(string xmlFilePath,int tableIndex)
  297. {
  298. return CXmlFileToDataSet(xmlFilePath).Tables[tableIndex];
  299. }
  300. /**//// <summary>
  301. /// 读取Xml文件信息,并转换成DataTable对象
  302. /// </summary>
  303. /// <param name="xmlFilePath">xml文江路径</param>
  304. /// <returns>DataTable对象</returns>
  305. public static DataTable CXmlToDataTable(string xmlFilePath)
  306. {
  307. return CXmlFileToDataSet(xmlFilePath).Tables[0];
  308. }
  309. }


  1. using System;
  2. using System.Data;
  3. using System.IO;
  4. using System.Xml;
  5. using System.Text;
  6. // 相应C#代码
  7. private string ConvertDataTableToXML(DataTable xmlDS)
  8. {
  9. MemoryStream stream = null;
  10. XmlTextWriter writer = null;
  11. try
  12. {
  13. stream = new MemoryStream();
  14. writer = new XmlTextWriter(stream,Encoding.Default);
  15. xmlDS.WriteXml(writer);
  16. int count = (int)stream.Length;
  17. byte[] arr = new byte[count];
  18. stream.Seek(0,SeekOrigin.Begin);
  19. stream.Read(arr,count);
  20. UTF8Encoding utf = new UTF8Encoding();
  21. return utf.GetString(arr).Trim();
  22. }
  23. catch
  24. {
  25. return String.Empty;
  26. }
  27. finally
  28. {
  29. if (writer != null) writer.Close();
  30. }
  31. }
  32.  
  33. private DataSet ConvertXMLToDataSet(string xmlData)
  34. {
  35. StringReader stream = null;
  36. XmlTextReader reader = null;
  37. try
  38. {
  39. DataSet xmlDS = new DataSet();
  40. stream = new StringReader(xmlData);
  41. reader = new XmlTextReader(stream);
  42. xmlDS.ReadXml(reader);
  43. return xmlDS;
  44. }
  45. catch (Exception ex)
  46. {
  47. string strTest = ex.Message;
  48. return null;
  49. }
  50. finally
  51. {
  52. if (reader != null)
  53. reader.Close();
  54. }
  55. }


  1. 数据库中表的内容转存为XML文件
  2. sqlConnection conn = new sqlConnection("server=.;database=db;uid=sa;pwd=");
  3. sqlCommand cmd = conn.CreateCommand();
  4. //把列的内容作为属性,根元素名子为<root>
  5. cmd.CommandText = "select * from student for xml auto,root('root')";
  6. conn.Open();
  7. XmlReader xr = cmd.ExecuteXmlReader();
  8. XmlDocument dd = new XmlDocument();
  9. dd.Load(xr); ;
  10. XmlNode xx = dd.FirstChild; //取得根元素
  11. XmlDeclaration xd = dd.CreateXmlDeclaration("1.0","utf-8","yes"); //创建XML声明
  12. dd.InsertBefore(xd,xx); //在根元素前加入XML声明
  13. dd.Save(Server.MapPath("tt.config"));
  14. conn.Close();
  15. 执行结果:
  16. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
  17. <root>
  18. <student sno="101" sname="李军" ssex="男" sbirthday="1976-02-20T00:00:00" class="95033" />
  19. <student sno="103" sname="陆君" ssex="男" sbirthday="1974-06-03T00:00:00" class="95031" />
  20. </root>
  21.  
  22. 如果把上面的sqlCommand对象的CommandText改为如下:
  23. cmd.CommandText = "select * from student for xml auto,root('root'),elements";
  24. 执行结果如下:
  25. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
  26. <root>
  27. <student>
  28. <sno>101</sno>
  29. <sname>李军</sname>
  30. <ssex>男</ssex>
  31. <sbirthday>1976-02-20T00:00:00</sbirthday>
  32. <class>95033</class>
  33. </student>
  34. <student>
  35. <sno>103</sno>
  36. <sname>陆君</sname>
  37. <ssex>男</ssex>
  38. <sbirthday>1974-06-03T00:00:00</sbirthday>
  39. <class>95031</class>
  40. </student>
  41. </root>

猜你在找的XML相关文章