当前位置: 首页 > news >正文

xml操作工具类

/// <summary>
    /// xml操作工具类
    /// </summary>
    public class XmlUtils
    {
        #region Fields
        /// <summary>
        /// xml文件物理地址
        /// </summary>
        private string xmlFilePath = String.Empty;
        #endregion

        #region Constructor
        /// <summary>
        /// 构造
        /// </summary>
        public XmlUtils()
        {

        }
        /// <summary>
        /// 构造
        /// </summary>
        /// <param name="path">xml文件物理地址</param>
        public XmlUtils(string path)
        {
            xmlFilePath = path;
        }
        #endregion

        #region Methods
        /// <summary>
        /// 读取xml数据,并转换成对象
        /// </summary>
        /// <typeparam name="T">对象类名</typeparam>
        /// <param name="obj">类实例对象</param>
        /// <param name="nodeName">节点名称</param>
        public void LoadXml<T>(ref T obj, string nodeName)
        {
            Type oType = obj.GetType();
            XmlDocument oXmlDocument = new XmlDocument();
            oXmlDocument.Load(xmlFilePath);
            foreach (XmlNode oXmlNode in oXmlDocument.SelectSingleNode(nodeName).ChildNodes)
            {
                string name = oXmlNode.Name;
                string value = oXmlNode.InnerText;
                foreach (PropertyInfo oPropertyInfo in oType.GetProperties())
                {
                    if (oPropertyInfo.Name.Equals(name, StringComparison.OrdinalIgnoreCase))
                    {
                        try
                        {
                            oPropertyInfo.SetValue(obj, Convert.ChangeType(value, oPropertyInfo.PropertyType), null);
                        }
                        catch
                        {
                        }
                        break;
                    }
                }
            }
        }

        /// <summary>
        /// 将对象以xml文件存储
        /// </summary>
        /// <typeparam name="T">对象类名</typeparam>
        /// <param name="obj">类实例</param>
        /// <param name="nodeName">生成的xml的根节点名称</param>
        /// <param name="encoding">xml的文本编码</param>
        public void SaveXml<T>(T obj, string nodeName, string encoding)
        {
            StringDictionary dic = new StringDictionary();
            Type oType = obj.GetType();
            foreach (PropertyInfo oPropertyInfo in oType.GetProperties())
            {
                try
                {
                    object propertyValue = oPropertyInfo.GetValue(obj, null);
                    string valueAsString = propertyValue.ToString();
                    if (propertyValue.Equals(null))
                    {
                        valueAsString = String.Empty;
                    }
                    if (propertyValue.Equals(Int32.MinValue))
                    {
                        valueAsString = String.Empty;
                    }
                    if (propertyValue.Equals(Decimal.MinValue))
                    {
                        valueAsString = String.Empty;
                    }
                    dic.Add(oPropertyInfo.Name, valueAsString);
                }
                catch
                { }
            }
            SaveXml(dic, nodeName, encoding);
        }
        /// <summary>
        /// 将对象以xml文件存储
        /// </summary>
        /// <param name="dic">键值对象</param>
        /// <param name="nodeName">生成的xml的根节点名称</param>
        /// <param name="encoding">xml的文本编码</param>
        public void SaveXml(StringDictionary dic, string nodeName, string encoding)
        {
            XmlWriterSettings oXmlWriterSettings = new XmlWriterSettings();
            oXmlWriterSettings.Encoding = Encoding.GetEncoding(encoding);
            oXmlWriterSettings.Indent = true;
            using (XmlWriter oXmlWriter = XmlWriter.Create(xmlFilePath, oXmlWriterSettings))
            {
                oXmlWriter.WriteStartElement(nodeName);
                foreach (string key in dic.Keys)
                {
                    oXmlWriter.WriteElementString(key, dic[key]);
                }
                oXmlWriter.WriteEndElement();
            }
        }

        /// <summary>
        /// 将对象串行化到XML
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        public void Serialize<T>(T obj)
        {
            XmlSerializer oXmlSerializer = new XmlSerializer(obj.GetType());
            using (Stream oStream = new FileStream(xmlFilePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
            {
                oXmlSerializer.Serialize(oStream, obj);
            }
        }

        /// <summary>
        /// 将XML反串行到对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        public void Deserialize<T>(ref T obj)
        {
            XmlSerializer oXmlSerializer = new XmlSerializer(typeof(T));
            using (Stream oStream = new FileStream(xmlFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                obj = (T)oXmlSerializer.Deserialize(oStream);
            }
        }
        #endregion
    }

转载于:https://www.cnblogs.com/xsmhero/archive/2010/06/01/1749309.html

相关文章:

  • xml报文理解 -----转-----
  • HP-UX 11i v2上Oracle10.2基本安装指南
  • Chrome审查元素【Network】Preserve log
  • 【STM32 .Net MF开发板学习-01】Hello world
  • 千万级PV规模高性能高并发网站架构
  • 用Linux防火墙构建软路由
  • C#中Validating和Validated事件
  • CentOS7关闭防火墙
  • 被晒的文章
  • Gartner:网络信息安全投入依然不在中国政企客户优先投入之列
  • git服务器的建立——Git折腾小记
  • 如何安装VMwareTools
  • linux下的超级终端Minicom
  • 数论初步
  • 吃6大排毒蔬菜 让你年轻10岁
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 《Java编程思想》读书笔记-对象导论
  • Angular Elements 及其运作原理
  • Django 博客开发教程 8 - 博客文章详情页
  • Java精华积累:初学者都应该搞懂的问题
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Python学习之路16-使用API
  • vue中实现单选
  • Web设计流程优化:网页效果图设计新思路
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 浅谈web中前端模板引擎的使用
  • 算法---两个栈实现一个队列
  • 线上 python http server profile 实践
  • Prometheus VS InfluxDB
  • ​渐进式Web应用PWA的未来
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #1014 : Trie树
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)【Hibernate总结系列】使用举例
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET6 命令行启动及发布单个Exe文件
  • .Net6使用WebSocket与前端进行通信
  • .NET单元测试
  • /proc/stat文件详解(翻译)
  • @Controller和@RestController的区别?
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具