DataToXml.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. using System.Data;
  2. using System.Text;
  3. using System.Xml;
  4. namespace VberZero.Tools.FileHelpers;
  5. /// <summary>
  6. /// 把DataSet、DataTable、DataView格式转换成XML字符串、XML文件
  7. /// </summary>
  8. public static class DataToXml
  9. {
  10. ///// <summary>
  11. ///// 将DataTable对象转换成XML字符串
  12. ///// </summary>
  13. ///// <param name="dt">DataTable对象</param>
  14. ///// <returns>XML字符串</returns>
  15. //public static string CDataToXml(DataTable dt)
  16. //{
  17. // if (dt != null)
  18. // {
  19. // MemoryStream ms = null;
  20. // XmlTextWriter XmlWt = null;
  21. // try
  22. // {
  23. // ms = new MemoryStream();
  24. // //根据ms实例化XmlWt
  25. // XmlWt = new XmlTextWriter(ms, Encoding.Unicode);
  26. // //获取ds中的数据
  27. // dt.WriteXml(XmlWt);
  28. // int count = (int)ms.Length;
  29. // byte[] temp = new byte[count];
  30. // ms.Seek(0, SeekOrigin.Begin);
  31. // ms.Read(temp, 0, count);
  32. // //返回Unicode编码的文本
  33. // UnicodeEncoding ucode = new UnicodeEncoding();
  34. // string returnValue = ucode.GetString(temp).Trim();
  35. // return returnValue;
  36. // }
  37. // catch (System.Exception ex)
  38. // {
  39. // throw ex;
  40. // }
  41. // finally
  42. // {
  43. // //释放资源
  44. // if (XmlWt != null)
  45. // {
  46. // XmlWt.Close();
  47. // ms.Close();
  48. // ms.Dispose();
  49. // }
  50. // }
  51. // }
  52. // else
  53. // {
  54. // return "";
  55. // }
  56. //}
  57. //以上转换在一些xml版本中存在问题,会出现SoapToolkit调用的时候返回值错误,那么这时候可以用以下这个方法做转换(建议大家都用以下这个方法.......因为本人曾经深受上面那个方法其害......T_T)。
  58. /// <summary>
  59. /// 将DataTable对象转换成XML字符串
  60. /// </summary>
  61. /// <param name="dt">DataTable对象</param>
  62. /// <returns>XML字符串</returns>
  63. public static string CDataToXml(this DataTable? dt)
  64. {
  65. StringBuilder strXml = new StringBuilder();
  66. strXml.AppendLine("<XmlTable>");
  67. if (dt != null)
  68. for (int i = 0; i < dt.Rows.Count; i++)
  69. {
  70. strXml.AppendLine("<rows>");
  71. for (int j = 0; j < dt.Columns.Count; j++)
  72. {
  73. strXml.AppendLine("<" + dt.Columns[j].ColumnName + ">" + dt.Rows[i][j] + "</" +
  74. dt.Columns[j].ColumnName + ">");
  75. }
  76. strXml.AppendLine("</rows>");
  77. }
  78. strXml.AppendLine("</XmlTable>");
  79. return strXml.ToString();
  80. }
  81. /// <summary>
  82. /// 将DataSet对象中指定的Table转换成XML字符串
  83. /// </summary>
  84. /// <param name="ds">DataSet对象</param>
  85. /// <param name="tableIndex">DataSet对象中的Table索引</param>
  86. /// <returns>XML字符串</returns>
  87. public static string CDataToXml(this DataSet ds, int tableIndex)
  88. {
  89. if (tableIndex != -1)
  90. {
  91. return CDataToXml(ds.Tables[tableIndex]);
  92. }
  93. else
  94. {
  95. return CDataToXml(ds.Tables[0]);
  96. }
  97. }
  98. /**//// <summary>
  99. /// 将DataSet对象转换成XML字符串
  100. /// </summary>
  101. /// <param name="ds">DataSet对象</param>
  102. /// <returns>XML字符串</returns>
  103. public static string CDataToXml(DataSet ds)
  104. {
  105. return CDataToXml(ds, -1);
  106. }
  107. /**//// <summary>
  108. /// 将DataView对象转换成XML字符串
  109. /// </summary>
  110. /// <param name="dv">DataView对象</param>
  111. /// <returns>XML字符串</returns>
  112. public static string CDataToXml(DataView dv)
  113. {
  114. return CDataToXml(dv.Table);
  115. }
  116. /**//// <summary>
  117. /// 将DataSet对象数据保存为XML文件
  118. /// </summary>
  119. /// <param name="dt">DataSet</param>
  120. /// <param name="xmlFilePath">XML文件路径</param>
  121. /// <returns>bool值</returns>
  122. public static bool CDataToXmlFile(this DataTable? dt, string xmlFilePath)
  123. {
  124. if ((dt != null) && (!string.IsNullOrEmpty(xmlFilePath)))
  125. {
  126. var xDoc = new XmlDocument { InnerXml = CDataToXml(dt) };
  127. xDoc.Save(xmlFilePath);
  128. return true;
  129. }
  130. return false;
  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. return CDataToXmlFile(ds.Tables[0], xmlFilePath);
  146. }
  147. /**//// <summary>
  148. /// 将DataSet对象转换成XML文件
  149. /// </summary>
  150. /// <param name="ds">DataSet对象</param>
  151. /// <param name="xmlFilePath">xml文件路径</param>
  152. /// <returns>bool]值</returns>
  153. public static bool CDataToXmlFile(DataSet ds, string xmlFilePath)
  154. {
  155. return CDataToXmlFile(ds, -1, xmlFilePath);
  156. }
  157. /**//// <summary>
  158. /// 将DataView对象转换成XML文件
  159. /// </summary>
  160. /// <param name="dv">DataView对象</param>
  161. /// <param name="xmlFilePath">xml文件路径</param>
  162. /// <returns>bool]值</returns>
  163. public static bool CDataToXmlFile(DataView dv, string xmlFilePath)
  164. {
  165. return CDataToXmlFile(dv.Table, xmlFilePath);
  166. }
  167. }