首页 > 学院 > 开发设计 > 正文

Digester 解析 XML 文档 Sample

2019-11-18 12:47:53
字体:
来源:转载
供稿:网友

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表