Digester解析XML文档Sample

发表于:2007-07-04来源:作者:点击数: 标签:
解析XML文档 Digester的使用相当简单,请参看如下的SampleDigester类中的注释,这里不再拗述: /*============================================================ * Copyright:www.skyinn.org (c) 2002 - 2003 All rights reserved. * File:org.skyinn.quasar
解析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


原文转自:http://www.ltesting.net