动态修改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();

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念