俺的XML处理类

来源:互联网 发布:淘宝京东e卡是怎么来的 编辑:程序博客网 时间:2024/06/06 14:04

using System;
using System.Data;
using System.Xml;

namespace NingQHai.Tools
{
    /// <summary>
    /// XML文件操作的封装
    /// </summary>
    public class myXml
    {
        /// <summary>
        /// 将DataTable当中的数据以XML方式存储到指定的位置
        /// </summary>
        /// <param name="tab">DataTable</param>
        /// <param name="XmlPath">存储位置</param>
        /// <returns>返回是否保存成功 true false</returns>
        public static Boolean SaveXml(DataTable tab, String XmlPath) {
            Boolean flag = false;
            try {

                 String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
                tab.WriteXml(Path);
                flag = true;
            }
            catch (Exception ex){
                Err.ErrString = ex.Message;
            }
            return flag;
        }
        #region XML读操作返加表
        /// <summary>
        /// 返回所有的XML记录
        /// </summary>
        /// <param name="XmlPath">XML文件路径</param>
        /// <returns></returns>
        public static DataTable ReadXml(String XmlPath)
        {
            DataTable Tab = null;
            try
            {
                 String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
                DataSet ds = new DataSet();
                ds.ReadXml(Path);
                if (ds != null)
                {
                    DataView dv = ds.Tables[0].DefaultView;
                    dv.Sort = ds.Tables[0].Columns[0] + " Desc";
                    Tab = ds.Tables[0];
                }
            }
            catch (Exception ex)
            {
                Err.ErrString = ex.ToString();

            }
            return Tab;
        }


        /// <summary>
        /// 返回所有的XML记录
        /// </summary>
        /// <param name="XmlPath">XML文件路径</param>
        /// <param name="SearchConditions">过滤条件,例如:id=1</param>
        /// <returns></returns>
        public static DataTable ReadXml(String XmlPath, String SearchConditions)
        {
            DataTable Tab = null;
            try
            {
                 String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
                DataSet ds = new DataSet();
                ds.ReadXml(Path);
                if (ds != null)
                {
                    DataView dv = ds.Tables[0].DefaultView;
                    dv.Sort = ds.Tables[0].Columns[0] + " Desc";
                    dv.RowFilter = SearchConditions;
                    Tab = ds.Tables[0];
                }
            }
            catch (Exception ex)
            {
                Err.ErrString = ex.ToString();

            }
            return Tab;
        }
        /// <summary>
        /// 返回所有的XML记录
        /// </summary>
        /// <param name="XmlPath">XML文件路径</param>
        /// <param name="Sort">排序表达式;例"id desc"</param>
        /// <param name="SearchConditions">过滤条件,例如:id=1</param>
        /// <returns></returns>
        public static DataTable ReadXml(String XmlPath, String Sort, String SearchConditions)
        {
            DataTable Tab = null;
            try
            {
                 String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
                DataSet ds = new DataSet();
                ds.ReadXml(Path);
                if (ds != null)
                {
                    DataView dv = ds.Tables[0].DefaultView;
                    dv.Sort = Sort;
                    dv.RowFilter = SearchConditions;
                    Tab = ds.Tables[0];
                }
            }
            catch (Exception ex)
            {
                Err.ErrString = ex.ToString();

            }
            return Tab;
        }


        /// <summary>
        /// 返回所有的XML记录
        /// </summary>
        /// <param name="XmlPath">XML文件路径</param>
        /// <param name="Size">返回的记录条数</param>
        /// <param name="SearchConditions">过滤条件,例如:id=1</param>
        /// <returns></returns>
        public static DataTable ReadXml(String XmlPath, int Size, String SearchConditions)
        {
            DataTable Tab = null;
            try
            {
                 String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
                DataSet ds = new DataSet();
                ds.ReadXml(Path);
                if (ds != null)
                {
                    DataTable BigTab = new DataTable();
                    DataView dv = ds.Tables[0].DefaultView;
                    dv.Sort = ds.Tables[0].Columns[0].ColumnName + " Desc";
                    dv.RowFilter = SearchConditions;
                    BigTab = dv.ToTable();
                    DataTable SmallTab = new DataTable();
                    SmallTab = BigTab.Clone();
                    for (int i = 0; i < Size; i++)
                    {
                        SmallTab.Rows.Add(dv[i].Row.ItemArray);
                    }
                    Tab = SmallTab;
                }
            }
            catch (Exception ex)
            {
                Err.ErrString = ex.ToString();
            }
            return Tab;
        }

        /// <summary>
        /// 返回所有的XML记录
        /// </summary>
        /// <param name="XmlPath">XML文件路径</param>
        /// <param name="Size">返回的记录条数</param>
        /// <returns></returns>
        public static DataTable ReadXml(String XmlPath, int Size)
        {
            DataTable Tab = null;
            try
            {
                 String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
                DataSet ds = new DataSet();
                ds.ReadXml(Path);
                if (ds != null)
                {
                    DataTable BigTab = new DataTable();
                    DataView dv = ds.Tables[0].DefaultView;
                    dv.Sort = ds.Tables[0].Columns[0].ColumnName + " Desc";
                    BigTab = dv.ToTable();
                    DataTable SmallTab = new DataTable();
                    SmallTab = BigTab.Clone();
                    for (int i = 0; i < Size; i++)
                    {
                        SmallTab.Rows.Add(dv[i].Row.ItemArray);
                    }
                    Tab = SmallTab;
                }
            }
            catch (Exception ex)
            {
                Err.ErrString = ex.ToString();
            }
            return Tab;
        }


        /// <summary>
        /// 返回所有的XML记录
        /// </summary>
        /// <param name="XmlPath">XML文件路径</param>
        /// <param name="Size">返回的记录条数</param>
        /// <param name="Sort">排序表达式;例"id desc"</param>
        /// <param name="SearchConditions">过滤条件,例如:id=1</param>
        /// <returns></returns>
        public static DataTable ReadXml(String XmlPath, int Size, String Sort, String SearchConditions)
        {
            DataTable Tab = null;
            try
            {
                 String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
                DataSet ds = new DataSet();
                ds.ReadXml(Path);
                if (ds != null)
                {
                    DataTable BigTab = new DataTable();
                    DataView dv = ds.Tables[0].DefaultView;
                    dv.Sort = Sort;
                    dv.RowFilter = SearchConditions;
                    BigTab = dv.ToTable();
                    DataTable SmallTab = new DataTable();
                    SmallTab = BigTab.Clone();
                    for (int i = 0; i < Size; i++)
                    {
                        SmallTab.Rows.Add(dv[i].Row.ItemArray);
                    }
                    Tab = SmallTab;
                }
            }
            catch (Exception ex)
            {
                Err.ErrString = ex.ToString();
            }
            return Tab;
        }
        #endregion
        /// <summary>
        /// 读取XML文件当中的一个节点文本
        /// </summary>
        /// <param name="XmlPath">XML文件路径</param>
        /// <param name="XPath">读取的节点完整XPath</param>
        /// <returns>指点节点内容</returns>
        public static String readXmlByNode(String XmlPath,String XPath) {
            String s = "";
            try {
              //  NingQHai.Tools.Utils.GetMapPath(XPath);
                String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);//HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath) + "/" + XmlPath;
                XmlDataDocument xmlDoc = new System.Xml.XmlDataDocument();
                xmlDoc.Load(Path);
                XmlNode node = xmlDoc.SelectSingleNode(XPath);
                if (node != null) {
                    s = node.InnerText;
                }

            }
            catch(Exception ex) {
                Err.ErrString = ex.ToString();
            }
            return s;
        }


        #region 删除XML文件中指定结点
        /// <summary>
        /// 删除XML文件中指定结点
        /// </summary>
        /// <param name="XmlPath">XML文件路径</param>
        /// <param name="RootNodeName">XML文件中跟节点的名称</param>
        /// <param name="Key">XML文件中唯一能标识此记录的属性和节点名称</param>
        /// <param name="KeyValue">XML文件中键的值</param>
        /// <returns></returns>
        public static Boolean DeleteNode(String XmlPath, String RootNodeName, String Key, String KeyValue)
        {
            Boolean Flag = false;
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
                xmlDoc.Load(Path);
                XmlNodeList xnl = xmlDoc.SelectSingleNode(RootNodeName).ChildNodes;
                foreach (XmlNode xn in xnl)
                {
                    XmlElement xe = (XmlElement)xn;
                    if (xe.GetAttribute(Key) == KeyValue)
                    {
                        xe.ParentNode.RemoveChild(xn);
                        break;
                    }
                }
                xmlDoc.Save(Path);
                Flag = true;
            }
            catch (Exception Ex)
            {
                Err.ErrString = Ex.ToString();
            }
            return Flag;
        }
        #endregion

        #region  XML文件的添加操作
        /// <summary>
        /// XML文件的添加操作
        /// </summary>
        /// <param name="XmlPath">XML文件路径</param>
        /// <param name="RootNodeName">根节点名称</param>
        /// <param name="CreateChildNode">要添加的节点</param>
        /// <param name="Keys">属性集合,例:"姓名,邮箱,QQ"</param>
        /// <param name="KeyValues">属性值的集合例:"Ningqhai,ningqhai@163.com,32806174"</param>
        /// <returns></returns>
        public static Boolean AddElement(String XmlPath, String RootNodeName, String CreateChildNode, String[] Keys, String[] KeyValues)
        {
            Boolean Flag = false;
            try
            {
                String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(Path);
                XmlNode xmldocSelect = xmlDoc.SelectSingleNode(RootNodeName);
                XmlElement el = xmlDoc.CreateElement(CreateChildNode); //添加CreateChildNode节点
                for (int i = 0; i < Keys.Length; i++)
                {
                    el.SetAttribute(Keys[i], KeyValues[i]); //添加CreateChildNode节点的属性Keys的KeyValues值
                }
                xmldocSelect.AppendChild(el);
                xmlDoc.Save(Path);
                Flag = true;
            }
            catch (Exception Ex)
            {
                Err.ErrString = Ex.ToString();
            }
            return Flag;
        }
        #endregion

        #region XML节点或属性的修改操作
        /// <summary>
        /// 修改属性
        /// </summary>
        /// <param name="XmlPath">XMl文件路径</param>
        /// <param name="RootNodeName">根节点的名称</param>
        /// <param name="UpDateKey">主键名称</param>
        /// <param name="UpdateKeyValue">主键的值</param>
        /// <param name="Keys">属性集合,例:"姓名,邮箱,QQ"</param>
        /// <param name="KeyValues">属性值的集合例:"Ningqhai,ningqhai@163.com,32806174"</param>
        /// <returns></returns>
        public static Boolean UpdateElement(String XmlPath, String RootNodeName, String UpDateKey, String UpdateKeyValue, String[] Keys, String[] KeyValues)
        {
            Boolean Flag = false;
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                String Path = NingQHai.Tools.Utils.GetMapPath(XmlPath);
                xmlDoc.Save(Path);
                XmlNodeList nodeList = xmlDoc.SelectSingleNode(RootNodeName).ChildNodes;//获取bookstore节点的所有子节点
                foreach (XmlNode xn in nodeList)//遍历所有子节点
                {
                    XmlElement xe = (XmlElement)xn;

                    if (xe.GetAttribute(UpDateKey) == UpdateKeyValue)
                        for (int i = 0; i < Keys.Length; i++)
                        {
                            xe.SetAttribute(Keys[i], KeyValues[i]);
                        }
                }
                xmlDoc.Save(Path);
                return true;
            }
            catch (Exception ex)
            {
                Err.ErrString = ex.ToString();
            }
            return Flag;
        }
        #endregion
    }
}