/*============================================================
* Copyright:www.skyinn.org (c) 2002 - 2003 All rights reserved.
* File:org.skyinn.quasar.config.SampleDigester
* Inculde:SampleDigester
* Modify Records
* Date Author Content
* =============================================================
* 2003-5-1 walker create class
* ============================================================*/
package org.skyinn.quasar.config;
import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;
import org.skyinn.quasar.action.ActionMapping;
import java.io.IOException;
/**
* Digester解析XML示例程序。
* <p>
* @author walker(walker@skyinn.org)
* <p>
* <strong>參考文獻:</strong><p>
* <a target="_blank">Learning and Using Jakarta Digester</a><p>
* <a target="_blank">用Digester簡化XML配置文件處理</a>
*/
public class SampleDigester{
private String configFile;
public void setConfigFile(final String configFile){
this.configFile = configFile;
}
/**
* 開始解析。
* <p>
* 在本方法,new一個Digester的實例,并將本類(SampleDigester)的實例壓入
*Digester的處理堆棧,調用Digester的addCallMethod方法將XML文件中的特定
*節點與處理方法聯系起來,并吊桶addCallParam方法設置參數,隨后解析給定的XML
*文件。
* @throws IOException IO異常
* @throws SAXException SAX異常
*/
public void run() throws IOException, SAXException{
//新建Digester實例
Digester digester = new Digester();
// This method pushes this (SampleDigester) class to the Digesters
// object stack making its method s available to processing rules.
digester.push(this);
/*quasar_module/module_info為XML文件中的節點路徑:<quasar_module><module_info>...
*addModuleInfo為本類中的一個方法(見下),即當碰到<quasar_module><module_info>節點時
*調用addModuleInfo方法,6表示該方法用六個參數,
*/
digester.addCallMethod("quasar_module/module_info", "addModuleInfo", 6);
//逐個設置參數,第一個參數的索引為0
digester.addCallParam("quasar_module/module_info/name", 0);
digester.addCallParam("quasar_module/module_info/description", 1);
digester.addCallParam("quasar_module/module_info/version", 2);
digester.addCallParam("quasar_module/module_info/author", 3);
digester.addCallParam("quasar_module/module_info/mail", 4);
digester.addCallParam("quasar_module/module_info/update_time", 5);
// This method starts the parsing of the document.
digester.parse(this.configFile);
}//end run()
/**
* 添加模塊信息。
* <p>
* 本方法僅將XML文件中的內容簡單輸出,實際應用中可以將獲得的信息進行進一步的處理。
*
* @param name 名字
* @param description 描述
* @param version 版本
* @param author 作者
* @param mail EMAIL
* @param updateTime 更新時間
public void addModuleInfo(final String name,
final String description,
final String version,
final String author,
final String mail,
final String updateTime){
//output
System.out.println("name=" + name + ",description=" + description
+ ",version=" + version + ",author=" + author
+ ",mail=" + mail + ",updateTime=" +updateTime);
}//end addModuleInfo()
/**
* 添加Action映射。
* <p>
* 本方法僅簡單輸出了傳入的ActionMapping的信息,在具體應用中可將其加入系統Action映射集合中。
* @param actionMapping Action映射
*/
public void addActionMapping(final ActionMapping actionMapping){
System.out.println(actionMapping);
}
public static void main(String[] args){
SampleDigester sd = new SampleDigester();
sd.setConfigFile("module.xml");
try{
sd.run();
sd = null;
}catch(Exception e){
e.printStackTrace();
}
//__________________________________________
//演示另一種解析方法
Digester digester = new Digester();
digester.setValidating( false );
//生成本類實例
digester.addObjectCreate( "quasar_module/action_mappings", SampleDigester.class);
//生成ActionMapping實例
digester.addObjectCreate("quasar_module/action_mappings/action",ActionMapping.class);
//獲取屬性值,并將其存入ActionMapping實例
digester.addSetProperties("quasar_module/action_mappings/action","name","name");
digester.addSetProperties("quasar_module/action_mappings/action","requestPath","requestPath");
digester.addSetProperties("quasar_module/action_mappings/action","actionClass","actionClass");
//調用SampleDigester的addActionMapping方法
digester.addSetNext("quasar_module/action_mappings/action","addActionMapping");
try{
}catch(Exception e){
e.printStackTrace();
}
}//end main()
}//EOC SampleDigester |