当前位置:天才代写 > tutorial > JAVA 教程 > 利用Digester理会XML文档示例

利用Digester理会XML文档示例

2017-11-11 08:00 星期六 所属: JAVA 教程 浏览:512

副标题#e#

一. 概述

理会XML文档方面有不少的要领,也有不少的东西包可用,这里先容的是来自Apache Jakarta的Digester,利用其理会XML文件很是利便而不需要过多的体贴底层的详细理会进程。

Digester最早呈此刻Struts中,厥后跟着Struts的成长以及其的公用性而被提到commens中独自立项,其底层实现的是SAX理会。当前版本为:1.5

二. 正文

1. 安装与设置

利用Digester需要如下几个软件包:

Digester ,BeanUtils, Collections, Commens-Logging,尚有一个遵循SAX(Simple API for XML)2.0或JAXP(Java API for XML Parsing) 1.1类型的XML理会器,如Xerces。相关下载地点见附录。假如需要利用log4j做为日志输出,则亦请下载之。

将下载来的zip包解压,并将个中的jar文件拷贝到你的工程文件的lib目次中,并在工程classpath中包括上述jar文件的路径。

在您工程的类目次(如classes)新建一commons-logging.properties文件,内容为:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4Jlogger

这表白系统将利用log4j做为日志输出,再建一log4j.proerties文件,内容请参看log4j文档或其他参考资料。

2. XML文件

在工程目次下新建一个XML文件,示例利用module.xml,内容见下:

<?xml version="1.0" encoding="gb2312" ?>
<quasar_module>
<!--模块信息-->
<module_info>
<name>Skyhome</name>
<description>the web site system of www.skyinn.org</description>
<version>2.0.1</version>
<author>l_wakler</author>
<mail>[email protected]</mail>
<update_time>2003-04-30</update_time>
</module_info>
<!--Action映射信息-->
<action_mappings>
<action name="home" requestPath="/Home"
actionClass="org.skyinn.action.GlobalAction">
</action>
<action name="forum"
requestPath="/Forum"
actionClass="org.skyinn.action.ForumAction">
</action>
</action_mappings>
</quasar_module>


#p#副标题#e#

3. 理会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([email protected])
* <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

#p#分页标题#e#

ActionMapping代码清单由于过长这里就不给出了,请自行撰写,只要使其有三个属性: name,actionClass,requestPath以及他们的getter、setter要领和toString要领即可。

 

    关键字:

天才代写-代写联系方式