`

动态修改xml文件

 
阅读更多

接上篇文章动态修改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文件 Xml操作 Xml文件的修改动态生成Rss文件...

    Groovy 动态修改XML

    在Java生态系统中,Groovy经常被用来处理XML文档,因为它的动态特性使得XML的读取、修改和生成变得更加简单。 在Groovy中,XML被视为一种对象,可以通过内置的XMLSlurper和XMLParser库来解析和操作。XMLSlurper是...

    QT程序中修改XML文件

    首先,QT库提供了QDomDocument类来处理XML文档,它基于DOM(Document Object Model)模型,允许开发者以树形结构操作XML文件。在QT程序中,我们通常会按照以下步骤操作XML: 1. **加载XML文件**:使用QFile打开XML...

    动态导航XML文件操作

    动态导航XML文件操作主要涉及对这些定义了导航结构的XML文件进行读取、修改和实时更新,以便根据用户需求或应用程序状态动态地调整导航内容。 首先,理解XML文件的结构至关重要。XML文件由一系列元素(Element)...

    C#动态加载XML文件,并更改节点属性值

    在C#编程中,动态加载XML文件并修改节点属性值是一项常见的任务,特别是在处理配置文件、数据存储或与XML相关的应用程序交互时。本教程将深入探讨如何实现这一目标,包括XML文档的加载、查找特定节点、修改属性以及...

    用java读取修改xml文件的代码实现

    Document Object Model(DOM)是一种将XML文档转换为内存中的树形结构的方法,使得可以遍历和修改XML文件。使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`接口来实现。以下是一个...

    动态生成XML文件

    标题中的“动态生成XML文件”指的是在程序运行过程中,根据特定的数据或逻辑生成XML文档的过程。这通常用于数据交换、配置文件存储或者报告生成等场景。在这个案例中,描述指出生成XML是基于数据库中表的结构,这...

    C#操作--修改XML文档

    首先,要操作XML文档,我们需要使用.NET Framework提供的System.Xml命名空间中的类。这个命名空间提供了许多处理XML的工具,如XmlDocument、XmlNode、XmlElement等。在C#中,我们通常使用XmlDocument类来加载、解析...

    C#动态生成XML文件

    本篇文章将详细探讨如何在C#中动态生成XML文件,包括创建XML元素、添加属性、设置参数等关键步骤。 首先,我们需要引入System.Xml命名空间,它是C#处理XML的基础。在代码开头加入以下语句: ```csharp using ...

    c++操作xml文件

    首先,我们来看标题"**c++操作xml文件**",这表明我们要讨论的是如何在C++程序中读取、写入或修改XML文件。C++本身并不直接支持XML解析,但可以通过第三方库如TinyXML、pugixml、libxml2等实现XML操作。在提供的描述...

    Qt操作XML文档(增删改查)

    首先,Qt中的`QDomDocument`类是用于解析和操作XML文档的核心类。它基于DOM(Document Object Model)模型,允许开发者以树形结构访问和修改XML文档的任何部分。要加载一个XML文件,可以创建`QDomDocument`对象并...

    VS之XML文件操作

    在Visual Studio(VS)中,XML文件操作是一个重要的开发任务,尤其对于处理数据存储、配置文件、序列化或数据交换等场景。XML(eXtensible Markup Language)是一种标记语言,它提供了结构化的数据表示方式,易于...

    操作xml文件_保存xml文件_操作XML_

    总结,操作XML文件包括创建XML文档、使用不同类型的解析器进行读取、通过DOM进行修改以及使用TransformerAPI保存。这些基本操作构成了XML处理的核心,掌握它们对于任何涉及XML的工作都至关重要。在实际开发中,还...

    C# LinqXML使用LINQ技术修改XML文件

    LinqXML是C#中的一个强大工具,它将XML编程带入了面向对象的世界,使我们可以像操作集合一样方便地操作XML文档。本教程将详细介绍如何使用C#的LinqXML技术来修改XML文件。 首先,我们需要引入`System.Xml.Linq`命名...

    java_动态生成XML文件

    本教程将深入讲解如何使用Java动态生成XML文件,并涉及相关的类和方法。 首先,我们需要了解两个核心的Java API:`javax.xml.transform`和`javax.xml.parsers`。前者主要用于XML文档的转换,后者则用于处理XML的...

    C# Winform 操作Xml(显示,添加,删除,修改)解析任何Xml

    在本文中,我们将深入探讨如何使用C# Winform来操作XML文件,包括显示、添加、删除和修改XML数据。XML(可扩展标记语言)是一种结构化数据存储格式,广泛用于软件开发中。C#提供了丰富的类库,如System.Xml命名空间...

    java 操作xml文件(包含xml文件和对应jar包)

    Java操作XML文件是Java开发中常见的一项任务,特别是在处理配置、数据交换或存储结构化信息时。XML(Extensible Markup Language)是一种标记语言,它的结构清晰、可读性强,易于机器解析和生成。本篇文章将深入探讨...

    操作XML文件 源代码

    本压缩包包含的是C#语言操作XML文件的源代码示例,这对于理解和掌握如何在.NET环境中处理XML文件至关重要。以下是关于XML文件操作和C#编程的相关知识点: 1. XML基本结构: - XML文档由元素(Element)组成,元素...

    xml文件树形显示,可添加删除修改xml节点

    在处理XML文件时,为了更好地理解和操作XML文档,通常会将其以树形结构显示,这种方式能直观地展示XML文档的层级关系。 在IT领域,"xml文件树形显示"涉及到的技术主要包括XML解析器和数据可视化。XML解析器负责读取...

Global site tag (gtag.js) - Google Analytics