| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- /*******************************************************************************
- * 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
- {
- /// <summary>
- /// 作XML的共通类
- /// </summary>
- public class OperateXmlUtility
- {
- public OperateXmlUtility()
- {
- //
- // 在此处添加构造函数逻辑
- //
- }
- /// <summary>
- /// 读取xml直接返回DataSet
- /// </summary>
- /// <param name="xmlPath">xml文件绝对路径</param>
- /// <returns>DataSet</returns>
- 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;
- }
- }
- /// <summary>
- /// 读取Xml返回一个经排序或筛选后的DataView
- /// </summary>
- /// <param name="xmlPath">xml文件绝对路径</param>
- /// <param name="filterConditions">筛选条件,如:"name = 'kgdiwss'" </param>
- /// <param name="sort">排序条件,如:"Id desc" </param>
- /// <returns></returns>
- 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;
- }
- }
- /// <summary>
- /// 向Xml文件插入一行数据
- /// </summary>
- /// <param name="xmlPath">xml文件绝对路径</param>
- /// <param name="columns">要插入行的列名数组,如:string[] Columns = {"name","IsMarried"};</param>
- /// <param name="columnValue">要插入行每列的值数组,如:string[] ColumnValue={"明天去要饭","false"}; </param>
- /// <returns>成功返回true,否则返回false </returns>
- 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;
- }
- }
- /// <summary>
- /// 通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行
- /// </summary>
- /// <param name="xmlPath">xml文件绝对路径</param>
- /// <param name="deleteRowIndex">要删除的行在DataSet中的Index值 </param>
- /// <returns>成功返回true,否则返回false</returns>
- 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;
- }
- }
- /// <summary>
- /// 删除column列中值为columnValue的行
- /// </summary>
- /// <param name="xmlPath">xml文件绝对路径</param>
- /// <param name="column">列名</param>
- /// <param name="columnValue">column列中值为columnValue的行均会被删除</param>
- /// <returns>成功返回true,否则返回false</returns>
- 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;
- }
- }
- /// <summary>
- /// 删除所有行
- /// </summary>
- /// <param name="xmlPath">xml文件绝对路径</param>
- /// <returns>成功返回true,否则返回false</returns>
- 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;
- }
- }
- }
- }
|