天天看点

使用commons-digester解析XML文档示例

一.概述 解析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,内容见下:

使用commons-digester解析XML文档示例

<? xml version="1.0" encoding="gb2312"  ?>

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

< quasar_module >

使用commons-digester解析XML文档示例

     <!-- 模块信息 -->

使用commons-digester解析XML文档示例

     < module_info >

使用commons-digester解析XML文档示例

         < name > Skyhome </ name >

使用commons-digester解析XML文档示例

         < description > the web site system of www.skyinn.org </ description >

使用commons-digester解析XML文档示例

         < version > 2.0.1 </ version >

使用commons-digester解析XML文档示例

         < author > l_wakler </ author >

使用commons-digester解析XML文档示例

         < mail > [email protected] </ mail >

使用commons-digester解析XML文档示例

         < update_time > 2003-04-30 </ update_time >

使用commons-digester解析XML文档示例

     </ module_info >

使用commons-digester解析XML文档示例

     <!-- Action映射信息 -->

使用commons-digester解析XML文档示例

     < action_mappings >

使用commons-digester解析XML文档示例

         < action  name ="home"  

使用commons-digester解析XML文档示例

                requestPath ="/Home"

使用commons-digester解析XML文档示例

                actionClass ="org.skyinn.action.GlobalAction" >

使用commons-digester解析XML文档示例

         </ action >

使用commons-digester解析XML文档示例

         < action  name ="forum"  

使用commons-digester解析XML文档示例

                requestPath ="/Forum"         

使用commons-digester解析XML文档示例

                actionClass ="org.skyinn.action.ForumAction" >

使用commons-digester解析XML文档示例

         </ action >

使用commons-digester解析XML文档示例

     </ action_mappings >

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

</ quasar_module > 3.解析XML文档

使用commons-digester解析XML文档示例

package  digester;

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

import  org.apache.commons.digester.Digester;

使用commons-digester解析XML文档示例

import  org.xml.sax.SAXException;

使用commons-digester解析XML文档示例

import  java.io.IOException;

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

public   class  SampleDigester  ... {

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

    private String configFile;

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

    public void setConfigFile(final String configFile) ...{

使用commons-digester解析XML文档示例

        this.configFile = configFile;

使用commons-digester解析XML文档示例

    }

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

    public void run() throws IOException, SAXException ...{

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

        // 新建Digester实例

使用commons-digester解析XML文档示例

        Digester digester = new Digester();

使用commons-digester解析XML文档示例

        // This method pushes this (SampleDigester) class to the Digesters

使用commons-digester解析XML文档示例

        // object stack making its method s available to processing rules.

使用commons-digester解析XML文档示例

        digester.push(this);

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

        digester.addCallMethod("quasar_module/module_info", "addModuleInfo", 6);

使用commons-digester解析XML文档示例

        // 逐个设置参数,第一个参数的索引为0

使用commons-digester解析XML文档示例

        digester.addCallParam("quasar_module/module_info/name", 0);

使用commons-digester解析XML文档示例

        digester.addCallParam("quasar_module/module_info/description", 1);

使用commons-digester解析XML文档示例

        digester.addCallParam("quasar_module/module_info/version", 2);

使用commons-digester解析XML文档示例

        digester.addCallParam("quasar_module/module_info/author", 3);

使用commons-digester解析XML文档示例

        digester.addCallParam("quasar_module/module_info/mail", 4);

使用commons-digester解析XML文档示例

        digester.addCallParam("quasar_module/module_info/update_time", 5);

使用commons-digester解析XML文档示例

        // This method starts the parsing of the document.

使用commons-digester解析XML文档示例

        digester.parse(this.configFile);

使用commons-digester解析XML文档示例

    }// end run()

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

    public void addModuleInfo(final String name, final String description,

使用commons-digester解析XML文档示例

            final String version, final String author, final String mail,

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

            final String updateTime) ...{

使用commons-digester解析XML文档示例

        // output

使用commons-digester解析XML文档示例

        System.out.println("name=" + name + ",description=" + description

使用commons-digester解析XML文档示例

                + ",version=" + version + ",author=" + author + ",mail=" + mail

使用commons-digester解析XML文档示例

                + ",updateTime=" + updateTime);

使用commons-digester解析XML文档示例

    }// end addModuleInfo()

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

    public void addActionMapping(final ActionMapping actionMapping) ...{

使用commons-digester解析XML文档示例

        System.out.println(actionMapping);

使用commons-digester解析XML文档示例

    }

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

    public static void main(String[] args) ...{

使用commons-digester解析XML文档示例

        SampleDigester sd = new SampleDigester();

使用commons-digester解析XML文档示例

        sd.setConfigFile("module.xml");

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

        try ...{

使用commons-digester解析XML文档示例

            sd.run();

使用commons-digester解析XML文档示例

            sd = null;

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

        } catch (Exception e) ...{

使用commons-digester解析XML文档示例

            e.printStackTrace();

使用commons-digester解析XML文档示例

        }

使用commons-digester解析XML文档示例

        // 演示另一种解析方法

使用commons-digester解析XML文档示例

        Digester digester = new Digester();

使用commons-digester解析XML文档示例

        digester.setValidating(false);

使用commons-digester解析XML文档示例

        // 生成本类实例

使用commons-digester解析XML文档示例

        digester.addObjectCreate("quasar_module/action_mappings",

使用commons-digester解析XML文档示例

                SampleDigester.class);

使用commons-digester解析XML文档示例

        // 生成ActionMapping实例

使用commons-digester解析XML文档示例

        digester.addObjectCreate("quasar_module/action_mappings/action",

使用commons-digester解析XML文档示例

                ActionMapping.class);

使用commons-digester解析XML文档示例

        // 获取属性值,并将其存入ActionMapping实例

使用commons-digester解析XML文档示例

        digester.addSetProperties("quasar_module/action_mappings/action",

使用commons-digester解析XML文档示例

                "name", "name");

使用commons-digester解析XML文档示例

        digester.addSetProperties("quasar_module/action_mappings/action",

使用commons-digester解析XML文档示例

                "requestPath", "requestPath");

使用commons-digester解析XML文档示例

        digester.addSetProperties("quasar_module/action_mappings/action",

使用commons-digester解析XML文档示例

                "actionClass", "actionClass");

使用commons-digester解析XML文档示例

        // 调用SampleDigester的addActionMapping方法

使用commons-digester解析XML文档示例

        digester.addSetNext("quasar_module/action_mappings/action",

使用commons-digester解析XML文档示例

                "addActionMapping");

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

        try ...{

使用commons-digester解析XML文档示例

            digester.parse("module.xml");

使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例
使用commons-digester解析XML文档示例

        } catch (Exception e) ...{

使用commons-digester解析XML文档示例

            e.printStackTrace();

使用commons-digester解析XML文档示例

        }

使用commons-digester解析XML文档示例

    }// end main()

使用commons-digester解析XML文档示例

} //  EOC SampleDigester

使用commons-digester解析XML文档示例

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