使用commons-digester解析XML文档示例
来源:互联网 发布:sopcast网络电视url 编辑:程序博客网 时间:2024/05/29 16:50
一.概述
解析XML文档方面有不少的方法,也有不少的工具包可用,这里介绍的是来自Apache Jakarta的Digester,使用其解析XML文件非常方便而不需要过多的关心底层的具体解析过程。
Digester最早出现在Struts中,后来随着Struts的发展以及其的公用性而被提到commens中独自立项,其底层实现的是SAX解析。
二.正文
1.安装与配置
使用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>walker@skyinn.org</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>
<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>walker@skyinn.org</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>
3.解析XML文档
package digester;
import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;
import java.io.IOException;
/** *//**
* Digester解析XML示例程序。
*/
public class SampleDigester ...{
private String configFile;
public void setConfigFile(final String configFile) ...{
this.configFile = configFile;
}
/** *//**
* 开始解析。 在本方法,new一个Digester的实例,并将本类(SampleDigester)的实例压入
* Digester的处理堆栈,调用Digester的addCallMethod方法将XML文件中的特定
* 节点与处理方法联系起来,并吊桶addCallParam方法设置参数,随后解析给定的XML 文件。
*/
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()
/** *//**
* 添加模块信息。 本方法仅将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映射。 本方法仅简单输出了传入的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
import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;
import java.io.IOException;
/** *//**
* Digester解析XML示例程序。
*/
public class SampleDigester ...{
private String configFile;
public void setConfigFile(final String configFile) ...{
this.configFile = configFile;
}
/** *//**
* 开始解析。 在本方法,new一个Digester的实例,并将本类(SampleDigester)的实例压入
* Digester的处理堆栈,调用Digester的addCallMethod方法将XML文件中的特定
* 节点与处理方法联系起来,并吊桶addCallParam方法设置参数,随后解析给定的XML 文件。
*/
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()
/** *//**
* 添加模块信息。 本方法仅将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映射。 本方法仅简单输出了传入的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
ActionMapping代码清单由于过长这里就不给出了,请自行撰写,只要使其有三个属性:name,actionClass,requestPath以及他们的getter、setter方法和toString方法即可。
- 使用commons-digester解析XML文档示例
- 使用Digester解析XML文档示例
- 使用Digester解析XML文档示例
- 使用Digester解析XML文档示例(zz from l_walker)
- 使用Digester解析XML文档
- commons-digester解析xml
- Digester解析xml文档
- 使用Digester解析xml
- XML文档解析器 Digester
- 使用Apache的Digester来解析XML文档
- 使用digester 解析xml配置文件
- 使用Digester解析XML配置文件
- Apache Commons - Digester XML
- commons-digester使用
- [Java学习]使用digester 解析xml配置文件
- 使用Struts Digester来解析XML文件
- 使用Digester解析XML文件简单范例
- 使用Struts Digester来解析XML文件
- C#中三维正交数组的创建
- 4.3.5 错误提示
- 使用OpenGL实现三维坐标的鼠标拣选(转)
- javascript小技巧-js小技巧收集(转)每一项都是js中的小技巧,但十分的实用!
- 4.4 服务器实现
- 使用commons-digester解析XML文档示例
- 4.4.1 初始化
- Windows CE下bootloader和驱动之间的通信
- 4.4.2 创建套接字
- "如何让自己成为一名黑客高手"
- 4.4.3 绑定套接字
- 内网计算机安全策略
- 更改Eclipse的jre
- eclipse编辑大小写