• [C#]XML操作类


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Xml;
    using System.Collections;
    using System.IO;
    using System.Reflection;
    
    namespace FrmUpdate
    {
        public class XmlHelper
        {
            /// <summary>--检查XML文件是否存在,不存在则先创建--
            /// Guo Jin
            /// </summary>
            /// <param name="baseDirectory">文件完整目录</param>
            /// <param name="fileName">文件名称</param>
            /// <returns>真/假</returns>
            private static bool CheckXmlFilesIsExists(string baseDirectory, string fileName)
            {
                bool isOk = true;
                DirectoryInfo dir = null;
                if (!Directory.Exists(baseDirectory))
                {
                    try
                    {
                        dir = new DirectoryInfo(baseDirectory);
                        dir.Create();
                    }
                    catch (IOException ex)
                    {
                        isOk = false;
                        throw new Exception("创建"   baseDirectory   "失败:"   ex.Message);
                    }
                }
    
                string filePath = baseDirectory   "\\"   fileName   ".ini";
                if (!File.Exists(filePath))
                {
                    try
                    {
                        FileStream fs = File.Open(filePath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
                        string xmlHead = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>"   Environment.NewLine   "<Items></Items>";
                        byte[] bytes = System.Text.Encoding.UTF8.GetBytes(xmlHead);
                        fs.Write(bytes, 0, bytes.Length);
                        fs.Flush();
                        fs.Close();
                        isOk = true;
                    }
                    catch (IOException ex)
                    {
                        isOk = false;
                        throw new Exception("创建"   fileName   "失败:"   ex.Message);
                    }
                }
                return isOk;
            }
    
            /// <summary>--把业务数据保存为xml数据存储在本机--
            /// Guo Jin 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="baseDir">程序启动路径</param>
            /// <param name="baseDir">文件名称</param>
            /// <param name="model">业务实体</param>
            /// <returns>真\假</returns>
            public static bool SaveAsXml<T>(string baseDir, string fileName, List<T> models)
            {
                bool result = false;
                XmlDocument doc = null;
                try
                {
                    if (!CheckXmlFilesIsExists(baseDir, fileName))
                    {
                        return false;
                    }
                    doc = new XmlDocument();
                    doc.Load(baseDir   @"\"   fileName   ".ini");
    
                    XmlNode root = doc.SelectSingleNode(@"//Items");//获取根节点
                    XmlElement element;//元素
                    XmlAttribute temp;//属性
                    PropertyInfo[] propinfos = null;
                    foreach (T obj in models)
                    {
                        if (models != null)
                        {
                            Type ty = obj.GetType();
                            propinfos = ty.GetProperties();//循环获取每个实体里面的所有属性。
                        }
    
                        element = doc.CreateElement(fileName);//为每个实体创建一个xml元素
    
                        foreach (PropertyInfo attb in propinfos)
                        {
                            temp = doc.CreateAttribute(attb.Name);
                            temp.Value = attb.GetValue(obj, null) == null ? "" : attb.GetValue(obj, null).ToString();
                            element.Attributes.Append(temp);
                        }
                        root.AppendChild(element);
    
                    }
    
                    doc.Save(baseDir   @"\"   fileName   ".ini");
                    result = true;
                }
                catch (Exception ex)
                {
                    result = false;
                    throw ex;
                }
                return result;
            }
    
            /// <summary>--根据条件到对应的Xml文件中检索数据
            /// Guo Jin
            /// </summary>
            /// <param name="baseDirectory">文件完整目录</param>
            /// <param name="fileName">Xml文件名</param>
            /// <param name="condition">条件</param>
            /// <param name="conditionValue">条件值</param>
            /// <returns>XmlNodeList</returns>
            public static XmlNodeList GetDataFromXml(string baseDirectory, string fileName, string condition, string conditionValue)
            {
                XmlNodeList list = null;
                XmlDocument doc = null;
                try
                {
                    string pathTemp = "";
                    if (!string.IsNullOrEmpty(baseDirectory))
                    {
                        pathTemp = baseDirectory   "\\"   fileName   ".ini";
                    }
    
                    if (File.Exists(pathTemp))
                    {
                        doc = new XmlDocument();
                        doc.Load(pathTemp);
    
                        string[] conditions = condition.Split(',');
                        string[] conditionValues = conditionValue.Split(',');
                        StringBuilder sb = new StringBuilder();
                        sb.Append(@"/Items/"   fileName   "[");
    
                        for (int i = 0; i < conditions.Length; i  )
                        {
                            if (conditions.Length == 1)//如果就一个条件
                            {
                                sb.Append("@"   conditions[i]   "'"   conditionValues[i]   "' ");
                            }
                            else if (conditions.Length > 1 && i != (conditions.Length - 1))//如果是多个条件,并且不是最后一个
                            {
                                sb.Append("@"   conditions[i]   "'"   conditionValues[i]   "' and ");
                            }
                            else if (conditions.Length != 1 && i == (conditions.Length - 1))
                            {
                                sb.Append("@"   conditions[i]   "'"   conditionValues[i]   "' ");
                            }
                        }
    
                        sb.Append("]");
    
                        list = doc.SelectNodes(sb.ToString());
                    }
    
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                return list;
            }
    
            /// <summary>--从xml文件中获取数据--
            /// Guo Jin
            /// </summary>
            /// <param name="baseDirectory">文件完整目录</param>
            /// <param name="fileName">文件名称</param>
            /// <returns></returns>
            public static XmlNodeList GetDataFromXml(string baseDirectory, string fileName)
            {
                XmlNodeList list = null;
                XmlDocument doc = null;
                try
                {
                    string pathTemp = "";
                    if (!string.IsNullOrEmpty(baseDirectory))
                    {
                        pathTemp = baseDirectory   "\\"   fileName   ".ini";
                    }
                    if (File.Exists(pathTemp))
                    {
                        doc = new XmlDocument();
                        doc.Load(pathTemp);
                        StringBuilder sb = new StringBuilder();
                        sb.Append(@"/Items/"   fileName);
                        list = doc.SelectNodes(sb.ToString());
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                return list;
            }
    
            /// <summary>--保存Xml文件--
            /// Guo Jin
            /// </summary>
            /// <param name="baseDir">完整路径</param>
            /// <param name="fileName">文件名称</param>
            /// <param name="tab">要写入的Hashtable</param>
            /// <returns>真/假</returns>
            public static bool SaveAsXml(string baseDir, string fileName, Hashtable tab)
            {
                bool result = false;
                XmlDocument doc = null;
                try
                {
                    if (!CheckXmlFilesIsExists(baseDir, fileName))
                    {
                        return false;
                    }
                    doc = new XmlDocument();
                    doc.Load(baseDir   @"\"   fileName   ".ini");
    
                    XmlNode root = doc.SelectSingleNode(@"//Items");//获取根节点
                    XmlElement element;//元素
    
                    foreach (DictionaryEntry de in tab)
                    {
                        XmlNode node = doc.SelectSingleNode(@"//Items//"   de.Key.ToString());
                        if (node == null)
                        {
                            //添加元素
                            element = doc.CreateElement(de.Key.ToString());
                            element.InnerText = de.Value.ToString();
    
                            root.AppendChild(element);
                        }
                        else
                        {
                            //修改元素值
                            node.InnerText = de.Value.ToString();
                        }
                    }
                    doc.Save(baseDir   @"\"   fileName   ".ini");
                    result = true;
                }
                catch (Exception ex)
                {
                    result = false;
                    throw ex;
                }
                return result;
            }
    
            /// <summary>--更新XML中某个元素的属性值--
            /// Guo Jin
            /// </summary>
            /// <param name="filePath">xml文件的完整路径</param>
            /// <param name="fileName">xml文件的名称,除去后缀名</param>
            /// <param name="where">检索条件</param>
            /// <param name="dis">要设置的元素的属性</param>
            /// <param name="val">更新的值</param>
            /// <returns>真/假</returns>
            public static bool UpdateXml(string filePath, string fileName, string where, string dis, string val)
            {
                bool result = false;
                XmlDocument doc = null;
                try
                {
                    if (File.Exists(filePath))
                    {
                        doc = new XmlDocument();
                        doc.Load(filePath);
    
                        XmlNode node = doc.SelectSingleNode(@"//Items//"   fileName   "[@"   where   "]");
                        if (node != null)
                        {
                            node.Attributes[dis].Value = val;
                            doc.Save(filePath);
                            result = true;
                        }
                    }
                }
                catch (Exception ex)
                {
                    result = false;
                    throw ex;
                }
                return result;
            }
    
            /// <summary>--根据某元素的文本--
            /// Guo Jin
            /// </summary>
            /// <param name="path">文件路径</param>
            /// <param name="nodeName">元素名称</param>
            /// <returns>该元素的Text</returns>
            public static string GetXmlNodeText(string path, string nodeName)
            {
                XmlDocument doc = null;
                try
                {
                    doc = new XmlDocument();
                    doc.Load(path);
                    StringBuilder sb = new StringBuilder();
                    sb.Append(@"/Items/"   nodeName);
                    XmlNode node = doc.SelectSingleNode(sb.ToString());
                    if (node != null)
                    {
                        return node.InnerText;
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                return "";
            }
        }
    }
  • 相关阅读:
    ASP.NET Web API中通过URI显示实体中的部分字段
    ASP.NET Web API中把分页信息放Header中返回给前端
    写一个针对IQueryable<T>的扩展方法支持动态排序
    Perl处理和收走子进程(退出状态码和wait)
    Perl多进程
    Perl信号处理
    大话西游之大圣娶亲中的至尊宝和紫霞仙子
    Perl List::Util模块用法详解
    Python面向对象:杂七杂八的知识点
    Python迭代和解析(5):搞懂生成器和yield机制
  • 原文地址:https://www.cnblogs.com/Hsppl/p/2597650.html
Copyright © 2020-2023  润新知