旗下导航:搜·么
当前位置:网站首页 > XML教程 > 正文

自定义XML动态设置顺序的示例代码分享【XML教程】,XML,动态配置程序,自定义

作者:搜教程发布时间:2019-11-27分类:XML教程浏览:70评论:0


导读:概述1在做顺序开辟时,我们每每要用到以下两个基本模块1>设置顺序的基本参数,如分页的参数、邮件参数等;2>在基于表驱动开辟时,即把一些推断的逻辑放在表...

概述

1 在做顺序开辟时,我们每每要用到以下两个基本模块

1> 设置顺序的基本参数,如分页的参数、邮件参数等;

2> 在基于表驱动开辟时,即把一些推断的逻辑放在表数据中;

2 在这两个基本应当中,我们有以下的需求:

1> 要集合治理;

2> 要可设置,即不重起体系的情况下,修正参数;

3> 易于运用。

顺序的重要功能

1> 设置顺序的基本参数,如分页的参数、邮件参数等;

----将XML中设置信息自动加到对应的实体上。

2> 在基于表驱动开辟时,即把一些推断的逻辑放在表数据中;

----将XML中的Dctionary 数据自动加载到对应的实体上。但此要领须要继承优化,如今仅支撑加载Dictionary,须要支撑更庞杂的构造。

重要代码

1 起首定义,在代码中援用实体。

示例

public class AppSetting
{
    public string PageSize;
    public string WebUrl;
 
    public Dictionary<string, string> IsPartialPayment;
    public Dictionary<string, string> EntityCurrency;
}

2 定义与之对应的XML文件。 个中,顺序的基本设置信息设置在AppSettings

节点下面。

<?xml version="1.0" encoding="utf-8" ?>
<settings>
  <DictSettings>
    <Dict name="AppSettings" >
      <add key="PageSize" value="2"></add>
      <add key="WebUrl" value="www.baidu.com"></add>
    </Dict>
    <Dict name="IsPartialPayment">
      <add key="TTPART" value="true"></add>
      <add key="TT50/50" value="true"></add>
    </Dict>
    <Dict name="EntityCurrency">
      <add key="China" value="CNY"></add>
      <add key="HQ" value="USD"></add>
      <add key="Default" value="USD"></add>
    </Dict>
  </DictSettings>
</settings>

3 末了须要一段XML加载代码,把2中的XML设置信息加载到1 中的实体中去。

public static class ConfigManager
    {
        public static AppSetting AppSetting;
        private static string xmlPath;
 
        public static Dictionary<string, Dictionary<string, string>> DictAppSettings = new Dictionary<string, Dictionary<string, string>>();
        static ConfigManager()
        {
            xmlPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory.ToString(), "AppConfig.xml");
            LoadSettings(xmlPath);
        }
 
        private static void LoadSettings(string path)
        {
            DictAppSettings.Clear();
            //加载XML中所有的key,value,并转换成Dictionary对象
            XmlNode dictRootNode = FileHelper.GetXMLNode(path, "/settings/DictSettings");
            foreach (XmlNode dictType in dictRootNode.ChildNodes)
            {
                Dictionary<string, string> dict = new Dictionary<string, string>();
                foreach (XmlNode dictItem in dictType.ChildNodes)
                {
                    dict.Add(dictItem.Attributes["key"].Value.Trim(), dictItem.Attributes["value"].Value.Trim());
                }
                DictAppSettings.Add(dictType.Attributes["name"].Value.Trim(), dict);
            }
 
            //将Dictionary 对象转换成实体的字段和对应dctionary上
            var serializer = new JavaScriptSerializer();
            //将AppSettings转成json
            string jAppSetting = serializer.Serialize(DictAppSettings["AppSettings"]);
            DictAppSettings.Remove("AppSettings");
            //将除AppSettings中的信息转成json
            string jDict = serializer.Serialize(DictAppSettings);
            //将AppSettings和别的的Dictionary 加载到对应的实体中去。
            string json = string.Format("{0},{1}", jAppSetting.Remove(jAppSetting.Length - 1), jDict.Remove(0, 1));
            AppSetting = serializer.Deserialize<AppSetting>(json);
 
            //当修正文件时,从新加载XML
            FileHelper.CacheDependencyFile(path, CacheRemovedCallback);
        }
 
        private static void CacheRemovedCallback(string key, object value, CacheItemRemovedReason reason)
        {
            //此要领来自Fish.Li
            string xmlFilePath = (string)value;
 
            // 因为事宜发作时,文件能够还没有完整封闭,所以只好让顺序稍等。
            System.Threading.Thread.Sleep(3000);
 
            LoadSettings(xmlFilePath);
        }
    }
 
    public static class FileHelper
    {
        public static XmlNode GetXMLNode(string path, string xPath)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(path);
            return xmlDoc.SelectSingleNode(xPath);
        }
 
        public static void CacheDependencyFile(string path, CacheItemRemovedCallback removedCallback)
        {
            CacheDependency dep = new CacheDependency(path);
            HttpRuntime.Cache.Insert(Guid.NewGuid().ToString(), path, dep,
                Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, removedCallback);
        }
    }

终究结果

1 当顺序第一次运行时,输出对应的设置信息

2 当修正部份参数时,无需重启,即可取得最新的信息。注重,当修正参数3秒后,再革新页面

以上就是自定义XML动态设置顺序的示例代码分享的细致内容,更多请关注ki4网别的相干文章!

标签:XML动态配置程序自定义


欢迎 发表评论: