Digester解析XML文档Sample

类别:Java 点击:0 评论:0 推荐:

解析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

本文地址:http://com.8s8s.com/it/it15642.htm