自定义XML动态配置程序的示例代码分享
概述
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动态配置程序的示例代码分享的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Netflix上的头像是你流媒体身份的可视化代表。用户可以超越默认的头像来展示自己的个性。继续阅读这篇文章,了解如何在Netflix应用程序中设置自定义个人资料图片。如何在Netflix中快速设置自定义头像在Netflix中,没有内置功能来设置个人资料图片。不过,您可以通过在浏览器上安装Netflix扩展来实现此目的。首先,在浏览器上安装Netflix扩展的自定义个人资料图片。你可以在Chrome商店买到它。安装扩展后,在浏览器上打开Netflix并登录您的帐户。导航至右上角的个人资料,然后单击

XML文件可以用PPT打开吗?XML,即可扩展标记语言(ExtensibleMarkupLanguage),是一种被广泛应用于数据交换和数据存储的通用标记语言。与HTML相比,XML更加灵活,能够定义自己的标签和数据结构,使得数据的存储和交换更加方便和统一。而PPT,即PowerPoint,是微软公司开发的一种用于创建演示文稿的软件。它提供了图文并茂的方

Python中的XML数据转换为CSV格式XML(ExtensibleMarkupLanguage)是一种可扩展标记语言,常用于数据的存储和传输。而CSV(CommaSeparatedValues)则是一种以逗号分隔的文本文件格式,常用于数据的导入和导出。在处理数据时,有时需要将XML数据转换为CSV格式以便于分析和处理。Python作为一种功能强大

维恩图是用来表示集合之间关系的图。要创建维恩图,我们将使用matplotlib。Matplotlib是一个在Python中常用的数据可视化库,用于创建交互式的图表和图形。它也用于制作交互式的图像和图表。Matplotlib提供了许多函数来自定义图表和图形。在本教程中,我们将举例说明三个示例来自定义Venn图。Example的中文翻译为:示例这是一个创建两个维恩图交集的简单示例;首先,我们导入了必要的库并导入了venns。然后我们将数据集创建为Python集,之后,我们使用“venn2()”函数创

如何在Eclipse中自定义快捷键设置?作为一名开发人员,在使用Eclipse进行编码时,熟练掌握快捷键是提高效率的关键之一。Eclipse作为一款强大的集成开发环境,不仅提供了许多默认的快捷键,还允许用户根据自己的偏好进行个性化的定制。本文将介绍如何在Eclipse中自定义快捷键设置,并给出具体的代码示例。打开Eclipse首先,打开Eclipse,并进入

使用Python处理XML中的错误和异常XML是一种常用的数据格式,用于存储和表示结构化的数据。当我们使用Python处理XML时,有时可能会遇到一些错误和异常。在本篇文章中,我将介绍如何使用Python来处理XML中的错误和异常,并提供一些示例代码供参考。使用try-except语句捕获XML解析错误当我们使用Python解析XML时,有时候可能会遇到一些

1、下图是edius默认的屏幕布局,默认的EDIUS窗口布局是横向版式,因此在单显示器环境中,许多窗口是重叠在一起的,且预览窗口为单窗口模式。2、您可以通过【视图】菜单栏启用【双窗口模式】,使预览窗口同时显示播放窗口和录制窗口。3、您可以通过【视图菜单栏>窗口布局>常规】来恢复默认屏幕布局。另外您还可以自定义适合您的布局方式,并保存为常用屏幕布局:将窗口拖动成适合自己的布局,然后点击【视图>窗口布局>保存当前布局>新建】,在弹出的【保存当前布局】小窗口中输入布局名称,单击确定

Python解析XML中的特殊字符和转义序列XML(eXtensibleMarkupLanguage)是一种常用的数据交换格式,用于在不同系统之间传输和存储数据。在处理XML文件时,经常会遇到包含特殊字符和转义序列的情况,这可能会导致解析错误或者误解数据。因此,在使用Python解析XML文件时,我们需要了解如何处理这些特殊字符和转义序列。一、特殊字符和
