zoukankan      html  css  js  c++  java
  • 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
        }

  • 相关阅读:
    【找回数学的感觉】1 再版汉诺塔等
    【算法】7 分不清栈和队列?一张图给你完整体会
    好玩的WPF第四弹:用Viewport2DVisual3D实现3D旋转效果
    我们应该怀念爱因斯坦的五个原因
    【万里征程——Windows App开发】如何在多个页面间读取/保存文件【草稿】
    仅仅是来自深夜的想法
    好玩的WPF第三弹:颤抖吧,地球!消失吧,地球!
    Markdown大赛二等奖
    让JavaScript在Visual Studio 2015中编辑得更容易
    好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效按钮
  • 原文地址:https://www.cnblogs.com/xsmhero/p/1749309.html
Copyright © 2011-2022 走看看