/******************************************************************************* * Copyright(c) 2012 dongke All rights reserved. / Confidential * 类的信息: * 1.程序名称:OperateXmlUtility.cs * 2.功能描述:操作XML的共通类 * 3.函数/方法列表: * 编辑履历: * 作者 日期 版本 修改内容 * 欧阳涛 2013/01/08 1.00 k新建 *******************************************************************************/ using System; using System.Data; using System.IO; namespace Dongke.IBOSS.PRD.Basics.Library { /// /// 作XML的共通类 /// public class OperateXmlUtility { public OperateXmlUtility() { // // 在此处添加构造函数逻辑 // } /// /// 读取xml直接返回DataSet /// /// xml文件绝对路径 /// DataSet public static DataSet GetDataSetByXml(string xmlPath) { try { if (!File.Exists(xmlPath)) { return null; } DataSet dataSet = new DataSet(); dataSet.ReadXml(xmlPath); if (dataSet.Tables.Count > 0) { return dataSet; } return null; } catch (Exception ex) { throw ex; } } /// /// 读取Xml返回一个经排序或筛选后的DataView /// /// xml文件绝对路径 /// 筛选条件,如:"name = 'kgdiwss'" /// 排序条件,如:"Id desc" /// public static DataView GetDataViewByXml(string xmlPath, string filterConditions, string sort) { try { if (!File.Exists(xmlPath)) { return null; } DataSet dataSet = new DataSet(); dataSet.ReadXml(xmlPath); DataView dataView = new DataView(dataSet.Tables["MessageDetail"]); if (!string.IsNullOrEmpty(sort)) { dataView.Sort = sort; } if (!string.IsNullOrEmpty(filterConditions)) { dataView.RowFilter = filterConditions; } return dataView; } catch (Exception ex) { throw ex; } } /// /// 向Xml文件插入一行数据 /// /// xml文件绝对路径 /// 要插入行的列名数组,如:string[] Columns = {"name","IsMarried"}; /// 要插入行每列的值数组,如:string[] ColumnValue={"明天去要饭","false"}; /// 成功返回true,否则返回false public static bool InsertIntoXml(string xmlPath, string[] columns, string[] columnValue) { try { if (string.IsNullOrEmpty(xmlPath)) { return false; } DataSet dataSet; // 没有文件,则新建文件 if (!File.Exists(xmlPath)) { // 文件夹不存在,则创建文件夹 if (!Directory.Exists(LocalPath.MessagePath)) { Directory.CreateDirectory(LocalPath.MessagePath); } File.Create(xmlPath).Close(); dataSet = new DataSet("Message"); DataTable newDataTable = new DataTable("MessageDetail"); newDataTable.Columns.Add("SenderID", typeof(int)); newDataTable.Columns.Add("Sender", typeof(string)); newDataTable.Columns.Add("ReceiverID", typeof(int)); newDataTable.Columns.Add("Receiver", typeof(string)); newDataTable.Columns.Add("Content", typeof(string)); newDataTable.Columns.Add("Font", typeof(string)); newDataTable.Columns.Add("Color", typeof(string)); newDataTable.Columns.Add("SendTime", typeof(DateTime)); dataSet.Tables.Add(newDataTable); } else { dataSet = new DataSet(); dataSet.ReadXml(xmlPath); } DataTable dataTable = dataSet.Tables["MessageDetail"]; // 在原来的表格基础上创建新行 DataRow newRow = dataTable.NewRow(); // 循环给一行中的各个列赋值 for (int i = 0; i < columns.Length; i++) { newRow[columns[i]] = columnValue[i]; } dataTable.Rows.Add(newRow); dataTable.AcceptChanges(); dataSet.AcceptChanges(); dataSet.WriteXml(xmlPath, XmlWriteMode.WriteSchema); return true; } catch (Exception ex) { throw ex; } } /// /// 通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行 /// /// xml文件绝对路径 /// 要删除的行在DataSet中的Index值 /// 成功返回true,否则返回false public static bool DeleteXmlRowByIndex(string xmlPath, int deleteRowIndex) { try { if (!File.Exists(xmlPath)) { return false; } DataSet dataSet = new DataSet(); dataSet.ReadXml(xmlPath); if (dataSet.Tables["MessageDetail"].Rows.Count > 0) { //删除符号条件的行 dataSet.Tables["MessageDetail"].Rows[deleteRowIndex].Delete(); } dataSet.WriteXml(xmlPath); return true; } catch (Exception ex) { throw ex; } } /// /// 删除column列中值为columnValue的行 /// /// xml文件绝对路径 /// 列名 /// column列中值为columnValue的行均会被删除 /// 成功返回true,否则返回false public static bool DeleteXmlRows(string xmlPath, string column, string[] columnValue) { try { if (!File.Exists(xmlPath)) { return false; } DataSet dataSet = new DataSet(); dataSet.ReadXml(xmlPath); //先判断行数 if (dataSet.Tables["MessageDetail"].Rows.Count > 0) { //判断行多还是删除的值多,多的for循环放在里面 if (columnValue.Length > dataSet.Tables["MessageDetail"].Rows.Count) { for (int i = 0; i < dataSet.Tables["MessageDetail"].Rows.Count; i++) { for (int j = 0; j < columnValue.Length; j++) { if (dataSet.Tables["MessageDetail"].Rows[i][column].ToString().Trim().Equals(columnValue[j])) { dataSet.Tables["MessageDetail"].Rows[i].Delete(); } } } } else { for (int j = 0; j < columnValue.Length; j++) { for (int i = 0; i < dataSet.Tables["MessageDetail"].Rows.Count; i++) { if (dataSet.Tables["MessageDetail"].Rows[i][column].ToString().Trim().Equals(columnValue[j])) { dataSet.Tables["MessageDetail"].Rows[i].Delete(); } } } } dataSet.WriteXml(xmlPath); } return true; } catch (Exception ex) { throw ex; } } /// /// 删除所有行 /// /// xml文件绝对路径 /// 成功返回true,否则返回false public static bool DeleteXmlAllRows(string xmlPath) { try { if (!File.Exists(xmlPath)) { return false; } DataSet dataSet = new DataSet(); dataSet.ReadXml(xmlPath); // 如果记录条数大于0 if (dataSet.Tables["MessageDetail"].Rows.Count > 0) { // 移除所有记录 dataSet.Tables["MessageDetail"].Rows.Clear(); } // 重新写入,这时XML文件中就只剩根节点了 dataSet.WriteXml(xmlPath); return true; } catch (Exception ex) { throw ex; } } } }