<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    風行天下

    JAVA太極
    posts - 4, comments - 10, trackbacks - 0, articles - 55
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    使用Digester解析XML文檔示例

    Posted on 2005-07-25 11:51 風太少 閱讀(151) 評論(0)  編輯  收藏

    關鍵字:xml,digester,解析

    內容摘要:

         本文簡要介紹和示例了使用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 target="_blank">Learning and Using Jakarta Digester</a><p>

     * <a 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 Digester:

    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下載地址:

            http://xml.apache.org/xerces2-j/index.html


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 97无码免费人妻超级碰碰夜夜| 本免费AV无码专区一区| 在线看片韩国免费人成视频| 亚洲AV无码码潮喷在线观看| 中文字幕免费在线看电影大全| 亚洲人成色7777在线观看不卡| 人体大胆做受免费视频| 亚洲精品视频免费观看| 日韩免费高清一级毛片| 久久精品国产亚洲Aⅴ蜜臀色欲| caoporn成人免费公开| 伊人久久大香线蕉亚洲五月天| 丝袜足液精子免费视频| 亚洲av午夜成人片精品网站| 57pao国产成永久免费视频| 亚洲国色天香视频| 午夜一级毛片免费视频| 一级女性全黄生活片免费看| 亚洲人成人无码网www国产| 鲁丝片一区二区三区免费| 亚洲精品一卡2卡3卡三卡四卡| 啦啦啦中文在线观看电视剧免费版| 亚洲欧好州第一的日产suv| 亚洲av无码成人精品区| 国产成人免费AV在线播放 | 国产国拍精品亚洲AV片| 久草视频在线免费看| 激情亚洲一区国产精品| 四虎永久免费地址在线观看| 成年女人A毛片免费视频| 亚洲乱码卡一卡二卡三| 无码国产亚洲日韩国精品视频一区二区三区 | 全黄A免费一级毛片| 亚洲爱情岛论坛永久| 最近最新的免费中文字幕| 免费在线观看一区| 亚洲福利视频导航| 国产精品视_精品国产免费| a级毛片无码免费真人久久| 亚洲中文字幕一二三四区苍井空 | 亚洲精品国产精品乱码视色|