zoukankan      html  css  js  c++  java
  • xmlHelper

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Xml;
    using System.Xml.Serialization;
    using System.IO;
    using System.Collections.Generic;
    using System.Text;
    
    namespace GTA.DC.MTAC.Client.BLL
    {
        /// <summary>
        /// 描述:XML操作类
        /// 作者:
        /// 时间:2011-5-18
        /// </summary>
        public class XmlHelper
        {
            /// <summary>
            /// 读取数据
            /// </summary>
            /// <param name="path">路径</param>
            /// <param name="node">节点</param>
            /// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param>
            /// <returns>string</returns>
            /**************************************************
             * 使用示列:
             * XmlHelper.Read(path, "/Node", "")
             * XmlHelper.Read(path, "/Node/Element[@Attribute='Name']", "Attribute")
             ************************************************/
            public string Read(string path, string node, string attribute)
            {
                string value = "";
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode xn = doc.SelectSingleNode(node);
                    value = (attribute.Equals("") ? xn.InnerText : xn.Attributes[attribute].Value);
                }
                catch { }
                return value;
            }
    
    
            /// <summary>
            /// 插入数据
            /// </summary>
            /// <param name="path">路径</param>
            /// <param name="node">节点</param>
            /// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>
            /// <param name="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param>
            /// <param name="value"></param>
            /// <returns></returns>
            /**************************************************
             * 使用示列:
             * XmlHelper.Insert(path, "/Node", "Element", "", "Value")
             * XmlHelper.Insert(path, "/Node", "Element", "Attribute", "Value")
             * XmlHelper.Insert(path, "/Node", "", "Attribute", "Value")
             ************************************************/
            public void Insert(string path, string node, string element, string attribute, string value)
            {
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode xn = doc.SelectSingleNode(node);
                    if (element.Equals(""))
                    {
                        if (!attribute.Equals(""))
                        {
                            XmlElement xe = (XmlElement)xn;
                            xe.SetAttribute(attribute, value);
                        }
                    }
                    else
                    {
                        XmlElement xe = doc.CreateElement(element);
                        if (attribute.Equals(""))
                            xe.InnerText = value;
                        else
                            xe.SetAttribute(attribute, value);
                        xn.AppendChild(xe);
                    }
                    doc.Save(path);
                }
                catch { }
            }
            /// <summary>
            /// 修改数据
            /// </summary>
            /// <param name="path">路径</param>
            /// <param name="node">节点</param>
            /// <param name="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param>
            /// <param name="value"></param>
            /// <returns></returns>
            /**************************************************
             * 使用示列:
             * XmlHelper.Insert(path, "/Node", "", "Value")
             * XmlHelper.Insert(path, "/Node", "Attribute", "Value")
             ************************************************/
            public void Update(string path, string node, string attribute, string value)
            {
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode xn = doc.SelectSingleNode(node);
                    XmlElement xe = (XmlElement)xn;
                    if (attribute.Equals(""))
                        xe.InnerText = value;
                    else
                        xe.SetAttribute(attribute, value);
                    doc.Save(path);
                }
                catch { }
            }
            /// <summary>
            /// 删除数据
            /// </summary>
            /// <param name="path">路径</param>
            /// <param name="node">节点</param>
            /// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>
            /// <param name="value"></param>
            /// <returns></returns>
            /**************************************************
             * 使用示列:
             * XmlHelper.Delete(path, "/Node", "")
             * XmlHelper.Delete(path, "/Node", "Attribute")
             ************************************************/
            public void Delete(string path, string node, string attribute)
            {
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode xn = doc.SelectSingleNode(node);
                    XmlElement xe = (XmlElement)xn;
                    if (attribute.Equals(""))
                        xn.ParentNode.RemoveChild(xn);
                    else
                        xe.RemoveAttribute(attribute);
                    doc.Save(path);
                }
                catch { }
            }
    
            private XmlDocument xmlDoc;
            /// <summary>  
            /// 加载xml文件  
            /// </summary>  
            /// <param name="path">xml文件的物理路径</param>  
            private void LoadXml(string path, string node_root)
            {
                xmlDoc = new XmlDocument();
                //判断xml文件是否存在  
                if (!System.IO.File.Exists(path))
                {
                    //创建xml 声明节点  
                    XmlNode xmlnode = xmlDoc.CreateNode(System.Xml.XmlNodeType.XmlDeclaration, "", "");
                    //添加上述创建和 xml声明节点  
                    xmlDoc.AppendChild(xmlnode);
                    //创建xml dbGuest 元素(根节点)  
                    XmlElement xmlelem = xmlDoc.CreateElement("", node_root, "");
                    xmlDoc.AppendChild(xmlelem);
                    try
                    {
                        xmlDoc.Save(path);
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    xmlDoc.Load(path);
                }
                else
                {
                    //加载xml文件  
                    xmlDoc.Load(path);
                }
                GC.Collect();
            }
            /// <summary>  
            /// 添加xml子节点  
            /// </summary>  
            /// <param name="path">xml文件的物理路径</param>  
            /// <param name="node_root">根节点名称</param>  
            /// <param name="node_name">添加的子节点名称</param>  
            /// <param name="node_text">子节点文本</param>  
            public void addElement(string path, string node_root, string node_name, string node_text, string att_name, string att_value)
            {
                LoadXml(path, node_root);
                XmlNodeList nodeList = xmlDoc.SelectSingleNode(node_root).ChildNodes;//获取bookstore节点的所有子节点 
                //判断是否有节点,有节点就遍历所有子节点,看看有没有重复节点,没节点就添加一个新节点  
                if (nodeList.Count > 0)
                {
                    foreach (XmlNode xn in nodeList)//遍历所有子节点   
                    {
                        XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                        if (xe.GetAttribute(att_name) != att_value)
                        {
                            XmlNode xmldocSelect = xmlDoc.SelectSingleNode(node_root);   //选中根节点  
                            XmlElement son_node = xmlDoc.CreateElement(node_name);    //添加子节点   
                            son_node.SetAttribute(att_name, att_value);     //设置属性  
                            son_node.InnerText = node_text;    //添加节点文本  
                            xmldocSelect.AppendChild(son_node);       //添加子节点  
                            xmlDoc.Save(path);          //保存xml文件  
                            break;
                        }
                    }
                }
                else
                {
                    XmlNode xmldocSelect = xmlDoc.SelectSingleNode(node_root);   //选中根节点  
                    XmlElement son_node = xmlDoc.CreateElement(node_name);    //添加子节点   
                    son_node.SetAttribute(att_name, att_value);     //设置属性  
                    son_node.InnerText = node_text;    //添加节点文本  
                    xmldocSelect.AppendChild(son_node);       //添加子节点  
                    xmlDoc.Save(path);          //保存xml文件  
                }
            }
            /// <summary>  
            /// 修改节点的内容  
            /// </summary>  
            /// <param name="path">xml文件的物理路径</param>  
            /// <param name="node_root">根节点名称</param>  
            /// <param name="new_text">节点的新内容</param>  
            /// <param name="att_name">节点的属性名</param>  
            /// <param name="att_value">节点的属性值</param>  
            public void UpdateElement(string path, string node_root, string new_text, string att_name, string att_value)
            {
                LoadXml(path, node_root);
                XmlNodeList nodeList = xmlDoc.SelectSingleNode(node_root).ChildNodes;//获取bookstore节点的所有子节点
                foreach (XmlNode xn in nodeList)//遍历所有子节点
                {
                    XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                    if (xe.GetAttribute(att_name) == att_value)
                    {
                        xe.InnerText = new_text;    //内容赋值  
                        xmlDoc.Save(path);//保存   
                        break;
                    }
                }
            }
            /// <summary>  
            /// 删除节点  
            /// </summary>  
            /// <param name="path">xml文件的物理路径</param>  
            /// <param name="node_root">根节点名称</param>  
            /// <param name="att_name">节点的属性名</param>  
            /// <param name="att_value">节点的属性值</param>  
            public void deleteNode(string path, string node_root, string att_name, string att_value)
            {
                LoadXml(path, node_root);
                XmlNodeList nodeList = xmlDoc.SelectSingleNode(node_root).ChildNodes;
                XmlNode root = xmlDoc.SelectSingleNode(node_root);
                foreach (XmlNode xn in nodeList)
                {
                    XmlElement xe = (XmlElement)xn;
                    if (xe.GetAttribute(att_name) == att_value)
                    {
                        //xe.RemoveAttribute("name");//删除name属性   
                        xe.RemoveAll();//删除该节点的全部内容  
                        root.RemoveChild(xe);
                        xmlDoc.Save(path);//保存   
                        break;
                    }
                }
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="filePath"></param>
            /// <param name="obj"></param>
            public static void Serialize<T>(string filePath, T[] array) where T : new()
            {
                if (string.IsNullOrEmpty(filePath) ||
                    array == null || array.Length == 0)
                {
                    return;
                }
    
                try
                {
                    XmlSerializerFactory xmlSerializerFactory = new XmlSerializerFactory();
                    XmlSerializer xmlSerializer =
                        xmlSerializerFactory.CreateSerializer(array.GetType(), typeof(T).Name);
                    Stream stream = new FileStream(filePath, FileMode.Create);
                    xmlSerializer.Serialize(stream, array);
                    stream.Close();
                }
                catch
                {
                }
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="filePath"></param>
            /// <param name="obj"></param>
            public static void Serialize<T>(string filePath, List<T> array) where T : new()
            {
                if (string.IsNullOrEmpty(filePath) ||
                    array == null || array.Count == 0)
                {
                    return;
                }
    
                try
                {
                    XmlSerializerFactory xmlSerializerFactory = new XmlSerializerFactory();
                    XmlSerializer xmlSerializer =
                        xmlSerializerFactory.CreateSerializer(array.GetType(), typeof(T).Name);
                    Stream stream = new FileStream(filePath, FileMode.Create);
                    xmlSerializer.Serialize(stream, array);
                    stream.Close();
                }
                catch
                {
                }
            }
    
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="filePath"></param>
            /// <param name="obj"></param>
            public static void Serialize(string filePath, object obj)
            {
                if (string.IsNullOrEmpty(filePath) || obj == null)
                {
                    return;
                }
    
                try
                {
                    XmlSerializerFactory xmlSerializerFactory = new XmlSerializerFactory();
                    XmlSerializer xmlSerializer =
                        xmlSerializerFactory.CreateSerializer(obj.GetType(), obj.GetType().Name);
                    Stream stream = new FileStream(filePath, FileMode.Create);
                    xmlSerializer.Serialize(stream, obj);
                    stream.Close();
                }
                catch
                {
                }
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="filePath"></param>
            /// <returns></returns>
            public static List<T> Deserialize<T>(string filePath) where T : new()
            {
                List<T> results = new List<T>();
                if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath))
                {
                    return results;
                }
    
                object obj = null;
                try
                {
                    XmlSerializerFactory xmlSerializerFactory = new XmlSerializerFactory();
                    XmlSerializer xmlSerializer =
                        xmlSerializerFactory.CreateSerializer(typeof(T[]), typeof(T).Name);
                    Stream stream = new FileStream(filePath, System.IO.FileMode.Open);
                    obj = xmlSerializer.Deserialize(stream);
                    stream.Close();
    
                    results.AddRange(obj as T[]);
                }
                catch
                {
                }
    
                return results;
            }
    
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="filePath"></param>
            /// <param name="targetType"></param>
            /// <returns></returns>
            public static object Deserialize(string filePath, Type targetType)
            {
                if (string.IsNullOrEmpty(filePath) || !File.Exists(filePath)
                    || targetType == null)
                {
                    return null;
                }
    
                object obj = null;
                try
                {
                    XmlSerializerFactory xmlSerializerFactory = new XmlSerializerFactory();
                    XmlSerializer xmlSerializer =
                        xmlSerializerFactory.CreateSerializer(targetType, targetType.Name);
                    Stream stream = new FileStream(filePath, FileMode.Open);
                    obj = xmlSerializer.Deserialize(stream);
                    stream.Close();
                }
                catch
                {
                }
    
                return obj;
            }
    
            /**/
            /// <summary>
            /// 将DataTable对象转换成XML字符串
            /// </summary>
            /// <param name="dt">DataTable对象</param>
            /// <returns>XML字符串</returns>
            public static string CDataToXml(DataTable dt)
            {
                if (dt != null)
                {
                    MemoryStream ms = null;
                    XmlTextWriter XmlWt = null;
                    try
                    {
                        ms = new MemoryStream();
                        //根据ms实例化XmlWt
                        XmlWt = new XmlTextWriter(ms, Encoding.Unicode);
                        //获取ds中的数据
                        dt.WriteXml(XmlWt);
                        int count = (int)ms.Length;
                        byte[] temp = new byte[count];
                        ms.Seek(0, SeekOrigin.Begin);
                        ms.Read(temp, 0, count);
                        //返回Unicode编码的文本
                        UnicodeEncoding ucode = new UnicodeEncoding();
                        string returnValue = ucode.GetString(temp).Trim();
                        return returnValue;
                    }
                    catch (System.Exception ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        //释放资源
                        if (XmlWt != null)
                        {
                            XmlWt.Close();
                            ms.Close();
                            ms.Dispose();
                        }
                    }
                }
                else
                {
                    return "";
                }
            }
    
            /// <summary>
            /// 把XML字符串转成DataTable
            /// </summary>
            /// <param name="xmlData"></param>
            /// <returns></returns>
            public static DataTable ConvertXMLToDataSet(string xmlData)
            {
                StringReader stream = null;
                XmlTextReader reader = null;
                try
                {
                    DataSet xmlDS = new DataSet();
                    stream = new StringReader(xmlData);
                    reader = new XmlTextReader(stream);
                    xmlDS.ReadXml(reader);
                    return xmlDS.Tables[0];
                }
                catch (Exception ex)
                {
                    string strTest = ex.Message;
                    return null;
                }
                finally
                {
                    if (reader != null)
                        reader.Close();
                }
            }
        }
    }
  • 相关阅读:
    1.解决有冲突的分支,切换分支时,文件不在了 2.冲突解决到底???
    Github到了一个工作区里面。嵌套了
    【计蒜课】【数据结构】【栈的复习】
    【计蒜课】【数据结构】【队列的复习】
    【计蒜课】【数据结构】【邻接矩阵使用的复习】
    【计蒜课】【数据结构】【链表的创建、插入、遍历操作的复习】
    【计蒜课】【数据结构】【顺序表查找、删除、遍历操作的复习答案】
    【计蒜课】【数据结构】【顺序表的构造、插入、扩容操作习题】
    实验六
    6.6实验五
  • 原文地址:https://www.cnblogs.com/benhua/p/6060691.html
Copyright © 2011-2022 走看看