OperateXmlUtility.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. /*******************************************************************************
  2. * Copyright(c) 2012 dongke All rights reserved. / Confidential
  3. * 类的信息:
  4. * 1.程序名称:OperateXmlUtility.cs
  5. * 2.功能描述:操作XML的共通类
  6. * 3.函数/方法列表:
  7. * 编辑履历:
  8. * 作者 日期 版本 修改内容
  9. * 欧阳涛 2013/01/08 1.00 k新建
  10. *******************************************************************************/
  11. using System;
  12. using System.Data;
  13. using System.IO;
  14. namespace Dongke.IBOSS.PRD.Basics.Library
  15. {
  16. /// <summary>
  17. /// 作XML的共通类
  18. /// </summary>
  19. public class OperateXmlUtility
  20. {
  21. public OperateXmlUtility()
  22. {
  23. //
  24. // 在此处添加构造函数逻辑
  25. //
  26. }
  27. /// <summary>
  28. /// 读取xml直接返回DataSet
  29. /// </summary>
  30. /// <param name="xmlPath">xml文件绝对路径</param>
  31. /// <returns>DataSet</returns>
  32. public static DataSet GetDataSetByXml(string xmlPath)
  33. {
  34. try
  35. {
  36. if (!File.Exists(xmlPath))
  37. {
  38. return null;
  39. }
  40. DataSet dataSet = new DataSet();
  41. dataSet.ReadXml(xmlPath);
  42. if (dataSet.Tables.Count > 0)
  43. {
  44. return dataSet;
  45. }
  46. return null;
  47. }
  48. catch (Exception ex)
  49. {
  50. throw ex;
  51. }
  52. }
  53. /// <summary>
  54. /// 读取Xml返回一个经排序或筛选后的DataView
  55. /// </summary>
  56. /// <param name="xmlPath">xml文件绝对路径</param>
  57. /// <param name="filterConditions">筛选条件,如:"name = 'kgdiwss'" </param>
  58. /// <param name="sort">排序条件,如:"Id desc" </param>
  59. /// <returns></returns>
  60. public static DataView GetDataViewByXml(string xmlPath, string filterConditions, string sort)
  61. {
  62. try
  63. {
  64. if (!File.Exists(xmlPath))
  65. {
  66. return null;
  67. }
  68. DataSet dataSet = new DataSet();
  69. dataSet.ReadXml(xmlPath);
  70. DataView dataView = new DataView(dataSet.Tables["MessageDetail"]);
  71. if (!string.IsNullOrEmpty(sort))
  72. {
  73. dataView.Sort = sort;
  74. }
  75. if (!string.IsNullOrEmpty(filterConditions))
  76. {
  77. dataView.RowFilter = filterConditions;
  78. }
  79. return dataView;
  80. }
  81. catch (Exception ex)
  82. {
  83. throw ex;
  84. }
  85. }
  86. /// <summary>
  87. /// 向Xml文件插入一行数据
  88. /// </summary>
  89. /// <param name="xmlPath">xml文件绝对路径</param>
  90. /// <param name="columns">要插入行的列名数组,如:string[] Columns = {"name","IsMarried"};</param>
  91. /// <param name="columnValue">要插入行每列的值数组,如:string[] ColumnValue={"明天去要饭","false"}; </param>
  92. /// <returns>成功返回true,否则返回false </returns>
  93. public static bool InsertIntoXml(string xmlPath, string[] columns, string[] columnValue)
  94. {
  95. try
  96. {
  97. if (string.IsNullOrEmpty(xmlPath))
  98. {
  99. return false;
  100. }
  101. DataSet dataSet;
  102. // 没有文件,则新建文件
  103. if (!File.Exists(xmlPath))
  104. {
  105. // 文件夹不存在,则创建文件夹
  106. if (!Directory.Exists(LocalPath.MessagePath))
  107. {
  108. Directory.CreateDirectory(LocalPath.MessagePath);
  109. }
  110. File.Create(xmlPath).Close();
  111. dataSet = new DataSet("Message");
  112. DataTable newDataTable = new DataTable("MessageDetail");
  113. newDataTable.Columns.Add("SenderID", typeof(int));
  114. newDataTable.Columns.Add("Sender", typeof(string));
  115. newDataTable.Columns.Add("ReceiverID", typeof(int));
  116. newDataTable.Columns.Add("Receiver", typeof(string));
  117. newDataTable.Columns.Add("Content", typeof(string));
  118. newDataTable.Columns.Add("Font", typeof(string));
  119. newDataTable.Columns.Add("Color", typeof(string));
  120. newDataTable.Columns.Add("SendTime", typeof(DateTime));
  121. dataSet.Tables.Add(newDataTable);
  122. }
  123. else
  124. {
  125. dataSet = new DataSet();
  126. dataSet.ReadXml(xmlPath);
  127. }
  128. DataTable dataTable = dataSet.Tables["MessageDetail"];
  129. // 在原来的表格基础上创建新行
  130. DataRow newRow = dataTable.NewRow();
  131. // 循环给一行中的各个列赋值
  132. for (int i = 0; i < columns.Length; i++)
  133. {
  134. newRow[columns[i]] = columnValue[i];
  135. }
  136. dataTable.Rows.Add(newRow);
  137. dataTable.AcceptChanges();
  138. dataSet.AcceptChanges();
  139. dataSet.WriteXml(xmlPath, XmlWriteMode.WriteSchema);
  140. return true;
  141. }
  142. catch (Exception ex)
  143. {
  144. throw ex;
  145. }
  146. }
  147. /// <summary>
  148. /// 通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行
  149. /// </summary>
  150. /// <param name="xmlPath">xml文件绝对路径</param>
  151. /// <param name="deleteRowIndex">要删除的行在DataSet中的Index值 </param>
  152. /// <returns>成功返回true,否则返回false</returns>
  153. public static bool DeleteXmlRowByIndex(string xmlPath, int deleteRowIndex)
  154. {
  155. try
  156. {
  157. if (!File.Exists(xmlPath))
  158. {
  159. return false;
  160. }
  161. DataSet dataSet = new DataSet();
  162. dataSet.ReadXml(xmlPath);
  163. if (dataSet.Tables["MessageDetail"].Rows.Count > 0)
  164. {
  165. //删除符号条件的行
  166. dataSet.Tables["MessageDetail"].Rows[deleteRowIndex].Delete();
  167. }
  168. dataSet.WriteXml(xmlPath);
  169. return true;
  170. }
  171. catch (Exception ex)
  172. {
  173. throw ex;
  174. }
  175. }
  176. /// <summary>
  177. /// 删除column列中值为columnValue的行
  178. /// </summary>
  179. /// <param name="xmlPath">xml文件绝对路径</param>
  180. /// <param name="column">列名</param>
  181. /// <param name="columnValue">column列中值为columnValue的行均会被删除</param>
  182. /// <returns>成功返回true,否则返回false</returns>
  183. public static bool DeleteXmlRows(string xmlPath, string column, string[] columnValue)
  184. {
  185. try
  186. {
  187. if (!File.Exists(xmlPath))
  188. {
  189. return false;
  190. }
  191. DataSet dataSet = new DataSet();
  192. dataSet.ReadXml(xmlPath);
  193. //先判断行数
  194. if (dataSet.Tables["MessageDetail"].Rows.Count > 0)
  195. {
  196. //判断行多还是删除的值多,多的for循环放在里面
  197. if (columnValue.Length > dataSet.Tables["MessageDetail"].Rows.Count)
  198. {
  199. for (int i = 0; i < dataSet.Tables["MessageDetail"].Rows.Count; i++)
  200. {
  201. for (int j = 0; j < columnValue.Length; j++)
  202. {
  203. if (dataSet.Tables["MessageDetail"].Rows[i][column].ToString().Trim().Equals(columnValue[j]))
  204. {
  205. dataSet.Tables["MessageDetail"].Rows[i].Delete();
  206. }
  207. }
  208. }
  209. }
  210. else
  211. {
  212. for (int j = 0; j < columnValue.Length; j++)
  213. {
  214. for (int i = 0; i < dataSet.Tables["MessageDetail"].Rows.Count; i++)
  215. {
  216. if (dataSet.Tables["MessageDetail"].Rows[i][column].ToString().Trim().Equals(columnValue[j]))
  217. {
  218. dataSet.Tables["MessageDetail"].Rows[i].Delete();
  219. }
  220. }
  221. }
  222. }
  223. dataSet.WriteXml(xmlPath);
  224. }
  225. return true;
  226. }
  227. catch (Exception ex)
  228. {
  229. throw ex;
  230. }
  231. }
  232. /// <summary>
  233. /// 删除所有行
  234. /// </summary>
  235. /// <param name="xmlPath">xml文件绝对路径</param>
  236. /// <returns>成功返回true,否则返回false</returns>
  237. public static bool DeleteXmlAllRows(string xmlPath)
  238. {
  239. try
  240. {
  241. if (!File.Exists(xmlPath))
  242. {
  243. return false;
  244. }
  245. DataSet dataSet = new DataSet();
  246. dataSet.ReadXml(xmlPath);
  247. // 如果记录条数大于0
  248. if (dataSet.Tables["MessageDetail"].Rows.Count > 0)
  249. {
  250. // 移除所有记录
  251. dataSet.Tables["MessageDetail"].Rows.Clear();
  252. }
  253. // 重新写入,这时XML文件中就只剩根节点了
  254. dataSet.WriteXml(xmlPath);
  255. return true;
  256. }
  257. catch (Exception ex)
  258. {
  259. throw ex;
  260. }
  261. }
  262. }
  263. }