接上篇文章动态修改properties文件,中的FileWacthdog.java作为父类,代码如下:
import org.apache.commons.digester.Digester; /** * <p> * Info: 动态加载collectionsFavourableActivity.xml文件,<br /> * 该文件使用 common-digester 库解析因此解析的文件要符合digester库要求的格式。 * </p> * <p> * Date: 2014-4-28 14:22:54 * </p> * @author zhangyq * */ public class CollectionsFavourableActiDynamicLoading { //------- 实体类变量 ---------------------------------- private static CollectionsFavourableActivity activity; public static CollectionsFavourableActivity getActivity() { return activity; } /** * 根据传递的文件配置并加载该文件 * @param configFilename 要解析文件的绝对路径 * @param delay 检验文件的间隔时间段 */ public static void configureAndLoad(String configFilename, long delay) { PropertyWatchdog pdog = new PropertyWatchdog(configFilename); pdog.setDelay(delay); pdog.start(); } //-------------------------------------- 静态内部类定义 -------------------------- /** * Info: 动态读取配置文件的信息 * @author zhangyq */ static class PropertyWatchdog extends FileWatchdog { /** * 构造函数 * @param configFileName 绝对路径 */ PropertyWatchdog(String filename){ super(filename); } @Override protected void doOnChange() { try { Digester digester = new Digester(); digester.addObjectCreate("CollectionsFavourableActivity", CollectionsFavourableActivity.class); digester.addSetProperties("CollectionsFavourableActivity"); activity = (CollectionsFavourableActivity) digester.parse(file); } catch (Exception e) { return; } } } //--------------------------------------end 静态内部类定义 end-------------------------- }
使用Digester库解析xml文件,上述解析的xml文件为:
<?xml version="1.0" encoding="UTF-8"?> <CollectionsFavourableActivity avtivitySatrtDate="2014-05-10 00:00:00" avtivityEndDate="2014-06-10 23:59:59" upperLimit="0" lowerLimit="1000" maxCountEveryMounth="3"> </CollectionsFavourableActivity>
Digester库解析后生成的对象类为:
public class CollectionsFavourableActivity { //----------------------------------------------- Instance Constants ---------------------- private String avtivitySatrtDate;//活动开始日期 private String avtivityEndDate;//活动结束日期 private Double upperLimit;//上限金额 private Double lowerLimit;//下限金额 private int maxCountEveryMounth;//每月最多优惠笔数 /** * 空的构造函数 */ public CollectionsFavourableActivity(){ super(); } /** * 一档 1000元(含)-5000元 10 10 * 二档 5001-10000元 50 50 * 三档 10001-50000(含)元 80 80 * 四档 50001-200000含)元 120 120 * 五档 200001元以上 150 150 * Info: 根据支付金额的及优惠笔数获得优惠后的金额 * @param orderPrice 订单金额 * @return 计算后的金额 */ public static double cal(double orderPrice){ double result = 0.0; if (orderPrice < 1000 && orderPrice > 0) { result = orderPrice; } else if (orderPrice >=1000 && orderPrice <= 5000) { result = orderPrice - 10; }else if (orderPrice > 5000 && orderPrice <= 10000) { result = orderPrice - 50; }else if (orderPrice > 10000 && orderPrice <= 50000) { result = orderPrice - 80; }else if (orderPrice > 50000 && orderPrice <= 200000) { result = orderPrice - 120; }else if (orderPrice > 200000) { result = orderPrice - 150; } return result ; } @Override public String toString() { return "{开始日期:"+avtivitySatrtDate+" 结束日期:"+avtivityEndDate+"\r\n"+ "上限金额:"+upperLimit.doubleValue()+" 下限金额:"+lowerLimit.doubleValue()+"\r\n"+ " 每月最多优惠笔数:"+maxCountEveryMounth+"}"; } //----------------------------------- start getter setter ----------------------------- public Double getUpperLimit() { return upperLimit; } public void setUpperLimit(Double upperLimit) { this.upperLimit = upperLimit; } public Double getLowerLimit() { return lowerLimit; } public void setLowerLimit(Double lowerLimit) { this.lowerLimit = lowerLimit; } public int getMaxCountEveryMounth() { return maxCountEveryMounth; } public void setMaxCountEveryMounth(int maxCountEveryMounth) { this.maxCountEveryMounth = maxCountEveryMounth; } public String getAvtivitySatrtDate() { return avtivitySatrtDate; } public void setAvtivitySatrtDate(String avtivitySatrtDate) { this.avtivitySatrtDate = avtivitySatrtDate; } public String getAvtivityEndDate() { return avtivityEndDate; } public void setAvtivityEndDate(String avtivityEndDate) { this.avtivityEndDate = avtivityEndDate; } //----------------------------------- end getter setter ----------------------------- }
测试使用:
CollectionsFavourableActiDynamicLoading.configureAndLoad(configFilename, delay); CollectionsFavourableActivity activity = CollectionsFavourableActiDynamicLoading.getActivity();
相关推荐
动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件...
在Java生态系统中,Groovy经常被用来处理XML文档,因为它的动态特性使得XML的读取、修改和生成变得更加简单。 在Groovy中,XML被视为一种对象,可以通过内置的XMLSlurper和XMLParser库来解析和操作。XMLSlurper是...
首先,QT库提供了QDomDocument类来处理XML文档,它基于DOM(Document Object Model)模型,允许开发者以树形结构操作XML文件。在QT程序中,我们通常会按照以下步骤操作XML: 1. **加载XML文件**:使用QFile打开XML...
动态导航XML文件操作主要涉及对这些定义了导航结构的XML文件进行读取、修改和实时更新,以便根据用户需求或应用程序状态动态地调整导航内容。 首先,理解XML文件的结构至关重要。XML文件由一系列元素(Element)...
在C#编程中,动态加载XML文件并修改节点属性值是一项常见的任务,特别是在处理配置文件、数据存储或与XML相关的应用程序交互时。本教程将深入探讨如何实现这一目标,包括XML文档的加载、查找特定节点、修改属性以及...
Document Object Model(DOM)是一种将XML文档转换为内存中的树形结构的方法,使得可以遍历和修改XML文件。使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`接口来实现。以下是一个...
标题中的“动态生成XML文件”指的是在程序运行过程中,根据特定的数据或逻辑生成XML文档的过程。这通常用于数据交换、配置文件存储或者报告生成等场景。在这个案例中,描述指出生成XML是基于数据库中表的结构,这...
首先,要操作XML文档,我们需要使用.NET Framework提供的System.Xml命名空间中的类。这个命名空间提供了许多处理XML的工具,如XmlDocument、XmlNode、XmlElement等。在C#中,我们通常使用XmlDocument类来加载、解析...
本篇文章将详细探讨如何在C#中动态生成XML文件,包括创建XML元素、添加属性、设置参数等关键步骤。 首先,我们需要引入System.Xml命名空间,它是C#处理XML的基础。在代码开头加入以下语句: ```csharp using ...
首先,我们来看标题"**c++操作xml文件**",这表明我们要讨论的是如何在C++程序中读取、写入或修改XML文件。C++本身并不直接支持XML解析,但可以通过第三方库如TinyXML、pugixml、libxml2等实现XML操作。在提供的描述...
首先,Qt中的`QDomDocument`类是用于解析和操作XML文档的核心类。它基于DOM(Document Object Model)模型,允许开发者以树形结构访问和修改XML文档的任何部分。要加载一个XML文件,可以创建`QDomDocument`对象并...
在Visual Studio(VS)中,XML文件操作是一个重要的开发任务,尤其对于处理数据存储、配置文件、序列化或数据交换等场景。XML(eXtensible Markup Language)是一种标记语言,它提供了结构化的数据表示方式,易于...
总结,操作XML文件包括创建XML文档、使用不同类型的解析器进行读取、通过DOM进行修改以及使用TransformerAPI保存。这些基本操作构成了XML处理的核心,掌握它们对于任何涉及XML的工作都至关重要。在实际开发中,还...
LinqXML是C#中的一个强大工具,它将XML编程带入了面向对象的世界,使我们可以像操作集合一样方便地操作XML文档。本教程将详细介绍如何使用C#的LinqXML技术来修改XML文件。 首先,我们需要引入`System.Xml.Linq`命名...
本教程将深入讲解如何使用Java动态生成XML文件,并涉及相关的类和方法。 首先,我们需要了解两个核心的Java API:`javax.xml.transform`和`javax.xml.parsers`。前者主要用于XML文档的转换,后者则用于处理XML的...
在本文中,我们将深入探讨如何使用C# Winform来操作XML文件,包括显示、添加、删除和修改XML数据。XML(可扩展标记语言)是一种结构化数据存储格式,广泛用于软件开发中。C#提供了丰富的类库,如System.Xml命名空间...
Java操作XML文件是Java开发中常见的一项任务,特别是在处理配置、数据交换或存储结构化信息时。XML(Extensible Markup Language)是一种标记语言,它的结构清晰、可读性强,易于机器解析和生成。本篇文章将深入探讨...
本压缩包包含的是C#语言操作XML文件的源代码示例,这对于理解和掌握如何在.NET环境中处理XML文件至关重要。以下是关于XML文件操作和C#编程的相关知识点: 1. XML基本结构: - XML文档由元素(Element)组成,元素...
在处理XML文件时,为了更好地理解和操作XML文档,通常会将其以树形结构显示,这种方式能直观地展示XML文档的层级关系。 在IT领域,"xml文件树形显示"涉及到的技术主要包括XML解析器和数据可视化。XML解析器负责读取...