服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

digester 解析 xml 文档 sample


  解析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

扫描关注微信公众号