解析xml文档
digester的使用相当简单,请参看如下的sampledigester类中的注释,这里不再拗述:
/*============================================================
* 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 href="http://www.onjava.com/pub/a/onjava/2002/10/23/digester.html" target="_blank">learning and using jakarta digester</a><p>
* <a href="http://developer.ccidnet.com/pub/disp/article?columnid=340&articleid=33259&pageno=1" 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{
digester.parse("module.xml");
}catch(exception e){
e.printstacktrace();
}
}//end main()
}//eoc sampledigester