您的位置:首页 > 其它

使用Digester解析XML文档示例

2008-04-26 01:07 746 查看
使用Digester解析XML文档示例l_walker 2003-5-2关键字:XMLDigester解析XML:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />内容摘要:本文简要介绍和示例了使用Apache的Digester解析XML文档的方法。

1. 概述

解析XML文档方面有不少的方法,也有不少的工具包可用,这里介绍的是来自Apache Jakarta的Digester,使用其解析XML文件非常方便而不需要过多的关心底层的具体解析过程。Digester最早出现在Struts中,后来随着Struts的发展以及其的公用性而被提到commens中独自立项,其底层实现的是SAX解析。当前版本为:1.5

2. 正文

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>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文档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 ActionMapping代码清单由于过长这里就不给出了,请自行撰写,只要使其有三个属性:name,actionClass,requestPath以及他们的getter、setter方法和toString方法即可,或者可以到我的网站上Quasar的代码在线浏览中找到该文件:http://www.skyinn.org 本文简要介绍了使用Apache Digester解析XML文件的方法,使用其和XML结合来做配置系统非常方便,具体应用实例请参见Quasar的config包中相关部分:http://quasar.skyinn.org

3. 参考文献

Learning and Using Jakarta DigesterDigester.html">http://www.onjava.com/pub/a/onjava/2002/10/23/Digester.html 用Digester简化XML配置文件处理:http://developer.ccidnet.com/pub/disp/Article?columnID=340&articleID=33259&pageNO=1

4. 附录

Digester,BeanUtils,Collections,Commens-logging下载地址:http://jakarta.apache.org/site/binindex.cgi Log4J下载地址: http://jakarta.apache.org/log4j/docs/index.html Xerces下载地址: XML.apache.org/xerces2-j/index.html">http://XML.apache.org/xerces2-j/index.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: