/*******************************************************************************
* 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;
}
}
}
}