.net中XML文件作为数据源的操作类

来源:互联网 发布:窦靖童怎么变瘦的 知乎 编辑:程序博客网 时间:2024/04/30 08:56

不解释了,自己看代码吧.......................

using System;
using System.Text;
using System.Data;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Xml;

namespace Gogofly.CommonOperation
{
 /// <summary>
 /// 数据类型转换
 /// </summary>
 public class DataTypeConvert
 {
  #region 数据类型转换

  public DataTypeConvert(){}

  /// <summary>
  /// 字符串转换为整数
  /// </summary>
  /// <param name="value"></param>
  /// <returns></returns>
  public static int ConvertToInt(string value)
  {   ///数据为空,返回-1
   if(string.IsNullOrEmpty(value))return -1;
   int result = -1;
   ///执行转换操作
   Int32.TryParse(value,out result);
   return result;
  }

  /// <summary>
  /// 字符串转换为时间
  /// </summary>
  /// <param name="value"></param>
  /// <returns></returns>
  public static DateTime ConvertToDateTime(string value)
  {   ///定义初始化值
   DateTime result = DateTime.Parse("1900-01-01");
   if(string.IsNullOrEmpty(value)) return result;
   ///执行转换操作
   DateTime.TryParse(value,out result);
   return result;
  }

  /// <summary>
  /// 字符串转换为实数
  /// </summary>
  /// <param name="value"></param>
  /// <returns></returns>
  public static decimal ConvertToDecimal(string value)
  {   ///定义初始化值
   decimal result = 0.0M;
   if(string.IsNullOrEmpty(value)) return result;
   ///执行转换操作
   decimal.TryParse(value,out result);
   return result;
  }

  /// <summary>
  /// 字符串转换为布尔类型
  /// </summary>
  /// <param name="value"></param>
  /// <returns></returns>
  public static bool ConvertToBoolean(string value)
  {   ///定义初始化值
   bool result = false;
   if(string.IsNullOrEmpty(value)) return result;
   ///执行转换操作
   bool.TryParse(value,out result);
   return result;
  }

  #endregion
 }

 public class DataBinder
 {
  #region 绑定控件的数据

  public DataBinder() { }

  /// <summary>
  /// 绑定列表控件的数据,数据源为SqlDataReader对象
  /// </summary>
  /// <param name="list"></param>
  /// <param name="dataSource"></param>
  /// <param name="dataTextField"></param>
  /// <param name="dataValueField"></param>
  public static void BindListData(ListControl list,SqlDataReader dataSource,
   string dataTextField,string dataValueField)
  {
   if(dataSource == null) { return; }
   ///绑定数据
   list.DataSource = dataSource;
   list.DataTextField = dataTextField;
   list.DataValueField = dataValueField;
   list.DataBind();
   ///关闭数据源
   dataSource.Close();
  }

  /// <summary>
  /// 绑定列表控件的数据,数据源为DataSet对象
  /// </summary>
  /// <param name="list"></param>
  /// <param name="dataSource"></param>
  /// <param name="dataTextField"></param>
  /// <param name="dataValueField"></param>
  public static void BindListData(ListControl list,DataSet dataSource,
   string dataTextField,string dataValueField)
  {
   if(dataSource == null) { return; }
   ///绑定数据
   list.DataSource = dataSource;
   list.DataTextField = dataTextField;
   list.DataValueField = dataValueField;
   list.DataBind();
  }

  /// <summary>
  /// 绑定列表控件的数据,数据源为DataTable对象
  /// </summary>
  /// <param name="list"></param>
  /// <param name="dataSource"></param>
  /// <param name="dataTextField"></param>
  /// <param name="dataValueField"></param>
  public static void BindListData(ListControl list,DataTable dataSource,
   string dataTextField,string dataValueField)
  {
   if(dataSource == null) { return; }
   ///绑定数据
   list.DataSource = dataSource;
   list.DataTextField = dataTextField;
   list.DataValueField = dataValueField;
   list.DataBind();
  }  

  /// <summary>
  /// 绑定GridView控件的数据,数据源为SqlDataReader对象
  /// </summary>
  /// <param name="gv"></param>
  /// <param name="dataSource"></param>
  public static void BindGridViewData(GridView gv,SqlDataReader dataSource)
  {
   if(dataSource == null) { return; }
   ///绑定数据
   gv.DataSource = dataSource;
   gv.DataBind();
   ///关闭数据源
   dataSource.Close();
  }
  
  /// <summary>
  /// 绑定GridView控件的数据,数据源为DataSet对象
  /// </summary>
  /// <param name="gv"></param>
  /// <param name="dataSource"></param>
  public static void BindGridViewData(GridView gv,DataSet dataSource)
  {
   if(dataSource == null) { return; }
   ///绑定数据
   gv.DataSource = dataSource;
   gv.DataBind();
  }

  /// <summary>
  /// 绑定GridView控件的数据,数据源为DataTable对象
  /// </summary>
  /// <param name="gv"></param>
  /// <param name="dataSource"></param>
  public static void BindGridViewData(GridView gv,DataTable dataSource)
  {
   if(dataSource == null) { return; }
   ///绑定数据
   gv.DataSource = dataSource;
   gv.DataBind();
  }

  /// <summary>
  /// 绑定DataList控件的数据,数据源为SqlDataReader对象
  /// </summary>
  /// <param name="list"></param>
  /// <param name="dataSource"></param>
  public static void BindDataListData(DataList list,SqlDataReader dataSource)
  {
   if(dataSource == null) { return; }
   ///绑定数据
   list.DataSource = dataSource;
   list.DataBind();
   ///关闭数据源
   dataSource.Close();
  }
  
  /// <summary>
  /// 绑定DataList控件的数据,数据源为DataSet对象
  /// </summary>
  /// <param name="list"></param>
  /// <param name="dataSource"></param>
  public static void BindDataListData(DataList list,DataSet dataSource)
  {
   if(dataSource == null) { return; }
   ///绑定数据
   list.DataSource = dataSource;
   list.DataBind();
  }

  /// <summary>
  /// 绑定DataList控件的数据,数据源为DataTable对象
  /// </summary>
  /// <param name="list"></param>
  /// <param name="dataSource"></param>
  public static void BindDataListData(DataList list,DataTable dataSource)
  {
   if(dataSource == null) { return; }
   ///绑定数据
   list.DataSource = dataSource;
   list.DataBind();
  }

  #endregion
 }

 public class ButtonEnable
 {
  #region 设置按钮的可用性

  public ButtonEnable() { }

  /// <summary>
  /// 根据整数列表设置按钮的可用性
  /// </summary>
  /// <param name="button"></param>
  /// <param name="idList"></param>
  public static void ControlButtonEnable(Button button,int[] idList)
  {   ///计算按钮的可用性
   bool IsEnabled = true;
   ///列表为空
   if(idList == null)
   {
    button.Enabled = IsEnabled;
    return;
   }
   foreach(int id in idList)
   {   ///如果id值大于0,则按钮可用
    IsEnabled = IsEnabled && (id > 0 ? true : false);
    if(IsEnabled == false) { break; }
   }
   button.Enabled = IsEnabled;
  }

  /// <summary>
  /// 根据列表控件列表设置按钮的可用性
  /// </summary>
  /// <param name="button"></param>
  /// <param name="listControl"></param>
  public static void ControlButtonEnable(Button button,
   params ListControl[] listControl)
  {   
   bool IsEnabled = true;
   ///列表为空
   if(listControl == null)
   {
    button.Enabled = IsEnabled;
    return;
   }
   foreach(ListControl control in listControl)
   {
    if(control != null)
    {   ///列表包含选择项,则按钮可用
     IsEnabled = IsEnabled && (control.Items.Count > 0 ? true : false);
     if(IsEnabled == false) { break; }
    }
   }
   button.Enabled = IsEnabled;
  }

  /// <summary>
  /// 根据整数列表和列表控件列表共同设置按钮的可用性
  /// </summary>
  /// <param name="button"></param>
  /// <param name="idList"></param>
  /// <param name="listControl"></param>
  public static void ControlButtonEnable(Button button,int[] idList,
   params ListControl[] listControl)
  {   ///根据参数idList设置按钮可用性
   ControlButtonEnable(button,idList);
   ///根据参数listControl设置按钮的可用性
   ControlButtonEnable(button,listControl);
  }

  #endregion
 }

 public class ListSelectedItem
 {
  #region 设置列表控件的选择项

  public ListSelectedItem() { }

  /// <summary>
  ///  根据Value属性把列表控件的选择项设置为指定项
  /// </summary>
  /// <param name="list"></param>
  /// <param name="value"></param>
  public static void ListSelectedItemByValue(ListControl list,string value)
  {
   if(list == null) return;
   ///选择项为空
   if(list.Items.Count <= 0)
   {
    list.SelectedIndex = -1;
    return;
   }
      ///逐项进行比较,设置选择项
   for(int i = 0; i < list.Items.Count; i++)
   {
    if(list.Items[i].Value == value)
    {
     list.SelectedIndex = i;
     return;
    }
   }
   ///没有符合条件的选择项
   list.SelectedIndex = -1;
  }

  /// <summary>
  /// 根据Text属性把列表控件的选择项设置为指定项
  /// </summary>
  /// <param name="list"></param>
  /// <param name="text"></param>
  public static void ListSelectedItemByText(ListControl list,string text)
  {
   if(list == null) return;
   ///选择项为空
   if(list.Items.Count <= 0)
   {
    list.SelectedIndex = -1;
    return;
   }
   ///逐项进行比较,设置选择项
   for(int i = 0; i < list.Items.Count; i++)
   {
    if(list.Items[i].Text == text)
    {
     list.SelectedIndex = i;
     return;
    }
   }
   ///没有符合条件的选择项
   list.SelectedIndex = -1;
  }

  #endregion
 }

 public class DealwithString
 {
  #region 字符串处理

  public DealwithString() { }

  /// <summary>
  /// 根据时间创建字符串
  /// </summary>
  /// <returns></returns>
  public static string CreatedStringByTime()
  {
   DateTime now = DateTime.Now;
   string str = now.Year.ToString()
    + now.Month.ToString()
    + now.Day.ToString()
    + now.Hour.ToString()
    + now.Minute.ToString()
    + now.Second.ToString()
    + now.Millisecond.ToString();
   return (str);
  }

  /// <summary>
  /// 格式化显示字符串的长度,如果超过指定的长度,则显示...
  /// </summary>
  /// <param name="str"></param>
  /// <param name="length"></param>
  /// <returns></returns>
  public static string FormatStringLength(string str,int length)
  {
   if(string.IsNullOrEmpty(str)) return string.Empty;

   ///如果包含中文字符,中文字符的长度加倍
   if(Encoding.UTF8.GetByteCount(str) > str.Length)
   {   ///调整为中文的长度,等于英文的一半
    length = length / 2;
   }
   if(str.Length > length)
   {
    return str.Substring(0,length) + "...";
   }
   return str;
  }

  #endregion
 }

 public class Dialog
 {
  public Dialog() { }

  #region 显示对话框

  public static void OpenDialog(HttpResponse response,string message)
  {
   response.Write("<script>alert('" + message + "')</script>");
  }

  public static void OpenDialogInAjax(Control c,string message)
  {
   
  }
  #endregion
 }
}

-----------------------------------------------------------------------------------------------------------------------------------------------------

using System;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using System.Collections;
using System.Data;
using Gogofly.CommonOperation;

namespace Gogolfy.OperateXmlDatabase
{
 public enum ParameterDirection
 {
  Insert,
  Update,
  Equal,
  NotEqual,
  Little,
  Great,
  Like
 }
  
 public sealed class XmlParamter //定义该类为密封类,阻止该类被继承
 {
  public XmlParamter(){} //实例构造函数

  private string name;
  public string Name
  {
   get { return this.name; }
   set { this.name = value; }
  }

  private string value;
  public string Value
  {
   get { return this.value; }
   set { this.value = value; }
  }

  private ParameterDirection direction;
  public ParameterDirection Direction
  {
   get { return this.direction; }
   set { this.direction = value; }
  }
 }
 
 public class XmlDatabase
 {
  public XmlDatabase() { }

  #region 获取XML中的数据

  public static DataTable GetData(string path,string tableName)
  {
   XmlDocument doc = new XmlDocument();

   try
   {   ///导入XML文档
    doc.Load(path);
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }

   DataTable dt = new DataTable();
   ///获取根节点
   XmlNode rootNode = doc.SelectSingleNode("/" + tableName + "s");
   if(rootNode == null) return null;
   if(rootNode.ChildNodes.Count <= 0) return null;
   ///创建保存记录的数据列
   foreach(XmlAttribute attr in rootNode.ChildNodes[0].Attributes)
   {
    dt.Columns.Add(new DataColumn(attr.Name,typeof(string)));
   }

   ///创新获取数据节点的XPath
   string xmlPath = "/" + tableName + "s/" + tableName;
   XmlNodeList nodeList = doc.SelectNodes(xmlPath);
   ///添加节点的数据
   foreach(XmlNode node in nodeList)
   {
    DataRow row = dt.NewRow();
    foreach(DataColumn column in dt.Columns)
    {   ///读取每一个属性
     row[column.ColumnName] = node.Attributes[column.ColumnName].Value;
    }
    dt.Rows.Add(row);
   }
   return dt;
  }

  public static DataTable GetData(string path,string tableName,params XmlParamter[] param)
  {
   XmlDocument doc = new XmlDocument();

   try
   {   ///导入XML文档
    doc.Load(path);
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }

   DataTable dt = new DataTable();
   ///获取根节点
   XmlNode rootNode = doc.SelectSingleNode("/" + tableName + "s");
   if(rootNode == null) return null;
   if(rootNode.ChildNodes.Count == 0) return null;
   ///创建保存记录的数据列
   foreach(XmlAttribute attr in rootNode.ChildNodes[0].Attributes)
   {
    dt.Columns.Add(new DataColumn(attr.Name,typeof(string)));
   }

   ///创建获取数据节点的XPath
   string xmlPath = "/" + tableName + "s/" + tableName;
   int operationCount = 0;
   StringBuilder operation = new StringBuilder();
   foreach(XmlParamter p in param)
   {
    if(p.Direction == ParameterDirection.Insert
     || p.Direction == ParameterDirection.Update)
    {
     continue;
    }
    ///创建条件表达式
    switch(p.Direction)
    {
     case ParameterDirection.Equal:
      operation.Append("@" + p.Name + "='" + p.Value + "'");
      break;
     case ParameterDirection.NotEqual:
      operation.Append("@" + p.Name + "<>'" + p.Value + "'");
      break;
     case ParameterDirection.Little:
      operation.Append("@" + p.Name + "<'" + p.Value + "'");
      break;
     case ParameterDirection.Great:
      operation.Append("@" + p.Name + ">'" + p.Value + "'");
      break;
     case ParameterDirection.Like:
      operation.Append("contains(@" + p.Name + ",'" + p.Value + "')");
      break;
     default: break;
    }
    operationCount++;
    operation.Append(" and ");
   }
   if(operationCount > 0)
   {   ///修正XPath
    operation.Remove(operation.Length - 5,5);
    xmlPath += "[" + operation.ToString() + "]";
   }

   XmlNodeList nodeList = doc.SelectNodes(xmlPath);
   ///添加节点的数据
   foreach(XmlNode node in nodeList)
   {
    DataRow row = dt.NewRow();
    foreach(DataColumn column in dt.Columns)
    {   ///读取每一个属性
     row[column.ColumnName] = node.Attributes[column.ColumnName].Value;
    }
    dt.Rows.Add(row);
   }
   return dt;
  }

  #endregion

  #region 添加数据

  public static int AddData(string path,string tableName,params XmlParamter[] param)
  {
   XmlDocument doc = new XmlDocument();

   try
   {   ///导入XML文档
    doc.Load(path);
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }   

   ///选择根节点
   XmlNode node = doc.SelectSingleNode("/" + tableName + "s");
   if(node == null) return -1;
   ///创建新记录的ID值
   int newID = DataTypeConvert.ConvertToInt(node.LastChild.Attributes["ID"].Value) + 1;
   if(newID < 1) return -1;
   ///创建一个新节点
   XmlNode newNode = doc.CreateNode(XmlNodeType.Element,tableName,null);
   if(newNode == null)return -1;
   ///添加ID的值
   newNode.Attributes.Append(CreateNodeAttribute(doc,"ID",newID.ToString()));
   ///添加新节点的属性
   foreach(XmlParamter p in param)
   {
    newNode.Attributes.Append(CreateNodeAttribute(doc,p.Name,p.Value));
   }
   ///将新节点追加到根节点中
   node.AppendChild(newNode);

   try
   {   ///保存XML文档
    doc.Save(path);
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }
   return newID;
  }

  #endregion

  #region 更新数据

  public static int UpdateData(string path,string tableName,params XmlParamter[] param)
  {
   XmlDocument doc = new XmlDocument();

   try
   {   ///导入XML文档
    doc.Load(path);
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }

   ///创新选择被修改节点的XPath
   string xmlPath = "/" + tableName + "s/" + tableName;
   int operationCount = 0;
   StringBuilder operation = new StringBuilder();
   foreach(XmlParamter p in param)
   {
    if(p.Direction == ParameterDirection.Insert
     || p.Direction == ParameterDirection.Update)
    {
     continue;
    }    
    switch(p.Direction)
    {
     case ParameterDirection.Equal:
      operation.Append("@" + p.Name + "='" + p.Value + "'");
      break;
     case ParameterDirection.NotEqual:
      operation.Append("@" + p.Name + "<>'" + p.Value + "'");
      break;
     case ParameterDirection.Little:
      operation.Append("@" + p.Name + "<'" + p.Value + "'");
      break;
     case ParameterDirection.Great:
      operation.Append("@" + p.Name + ">'" + p.Value + "'");
      break;
     case ParameterDirection.Like:
      operation.Append("contains(@" + p.Name + ",'" + p.Value + "')");
      break;
     default: break;
    }
    operationCount++;
    operation.Append(" and ");
   }
   if(operationCount > 0)
   {    
    operation.Remove(operation.Length - 5,5);
    xmlPath += "[" + operation.ToString() + "]";
   }

   XmlNodeList nodeList = doc.SelectNodes(xmlPath);
   if(nodeList == null) return -1;
   ///修改节点的属性
   foreach(XmlNode node in nodeList)
   { ///修改单个节点的属性
    foreach(XmlParamter p in param)
    {
     if(p.Direction == ParameterDirection.Update)
     {
      node.Attributes[p.Name].Value = p.Value;
     }
    }
   }

   try
   {   ///保存XML文档
    doc.Save(path);
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }
   return nodeList.Count;
  }

  #endregion

  #region 删除数据

  public static int DeleteData(string path,string tableName,params XmlParamter[] param)
  {
   XmlDocument doc = new XmlDocument();

   try
   {   ///导入XML文档
    doc.Load(path);
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }

   ///创新选择被修改节点的XPath
   string xmlPath = "/" + tableName + "s/" + tableName;
   int operationCount = 0;
   StringBuilder operation = new StringBuilder();
   foreach(XmlParamter p in param)
   {
    if(p.Direction == ParameterDirection.Insert
     || p.Direction == ParameterDirection.Update)
    {
     continue;
    }
    switch(p.Direction)
    {
     case ParameterDirection.Equal:
      operation.Append("@" + p.Name + "='" + p.Value + "'");
      break;
     case ParameterDirection.NotEqual:
      operation.Append("@" + p.Name + "<>'" + p.Value + "'");
      break;
     case ParameterDirection.Little:
      operation.Append("@" + p.Name + "<'" + p.Value + "'");
      break;
     case ParameterDirection.Great:
      operation.Append("@" + p.Name + ">'" + p.Value + "'");
      break;
     case ParameterDirection.Like:
      operation.Append("contains(@" + p.Name + ",'" + p.Value + "')");
      break;
     default: break;
    }
    operationCount++;
    operation.Append(" and ");
   }
   if(operationCount > 0)
   {
    operation.Remove(operation.Length - 5,5);
    xmlPath += "[" + operation.ToString() + "]";
   }

   XmlNodeList nodeList = doc.SelectNodes(xmlPath);
   if(nodeList == null) return -1;
   ///删除被选择的节点
   foreach(XmlNode node in nodeList)
   { ///删除单个节点
    XmlNode parentNode = node.ParentNode;
    parentNode.RemoveChild(node);
   }

   try
   {   ///保存XML文档
    doc.Save(path);
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }
   return nodeList.Count;
  }

  #endregion

  #region 创建参数

  private static XmlAttribute CreateNodeAttribute(XmlDocument doc,String name,String value)
  {
   XmlAttribute attribute = doc.CreateAttribute(name,null);
   attribute.Value = value;
   return attribute;
  }

  private static XmlParamter CreateParameter(string name,string value,ParameterDirection direciton)
  {
   XmlParamter p = new XmlParamter();
   p.Name = name;
   p.Value = value;
   p.Direction = direciton;

   return p;
  }

  public static XmlParamter CreateInsertParameter(string name,string value)
  {
   return CreateParameter(name,value,ParameterDirection.Insert);
  }
  public static XmlParamter CreateUpdateParameter(string name,string value)
  {
   return CreateParameter(name,value,ParameterDirection.Update);
  }
  public static XmlParamter CreateEqualParameter(string name,string value)
  {
   return CreateParameter(name,value,ParameterDirection.Equal);
  }
  public static XmlParamter CreateGreatParameter(string name,string value)
  {
   return CreateParameter(name,value,ParameterDirection.Great);
  }
  public static XmlParamter CreateLittleParameter(string name,string value)
  {
   return CreateParameter(name,value,ParameterDirection.Little);
  }
  public static XmlParamter CreateNotEqualParameter(string name,string value)
  {
   return CreateParameter(name,value,ParameterDirection.NotEqual);
  }
  public static XmlParamter CreateLikeParameter(string name,string value)
  {
   return CreateParameter(name,value,ParameterDirection.Like);
  }

  #endregion
 }
}

原创粉丝点击