使用Digester解析XML文件示例 (轉)

amyz發表於2007-11-07
使用Digester解析XML文件示例 (轉)[@more@]

使用Digester解析文件示例

l_walker -5-2

關鍵字:xml,digester,解析microsoft-com::office" />

內容摘要:

   本文簡要介紹和示例了使用的Digester來解析XML文件的方法。

 

1.  概述

解析XML文件方面有不少的方法,也有不少的工具包可用,這裡介紹的是來自Apache Jakarta的Digester,使用其解析XML非常方便而不需要過多的關心底層的具體解析過程。

Digester最早出現在中,後來隨著Struts的發展以及其的公用性而被提到commens中獨自立項,其底層實現的是SAX解析。當前版本為:1.5

2.  正文

1.  與

使用Digester需要如下幾個包:

  Digester ,BeanUtils, Collections, Commens-Logging,還有一個遵循SAX(Simple for XML)2.0或JAXP( 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,內容見下:

 

  <!--模組資訊--&gt

 

  Skyhome

  the site system of

  2.0.1

   l_wakler

  <>walker@skyinn.org

  2003-04-30

 

 

  <!--Action對映資訊--&gt

 

 

  requestPath="/Home"

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

 

 

 

  requestPath="/Forum"

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

 

 

 

 

 

 

3.  解析XML文件

Digester的使用相當簡單,請參看如下的SampleDigester類中的註釋,這裡不再拗述:

 

/*============================================================

 * Copyright: (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示例。

 *

 * @author walker(walker@skyinn.org)

 *

 * 參考文獻:

 * Learning and Using Jakarta Digester

 * 用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

  *檔案。

  * @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

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

  digester.push(this);

  /*quasar_module/module_info為XML檔案中的節點路徑:...

  *addModuleInfo為本類中的一個方法(見下),即當碰到節點時

   *呼叫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

  * @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方法即可,或者可以到我的網站上Quasar的程式碼線上瀏覽中找到該檔案:

 

本文簡要介紹了使用Apache digester解析XML檔案的方法,使用其和XML結合來做配置系統非常方便,具體應用例項請參見Quasar的config包中相關部分:

 

 

3.  參考文獻

Learning and Using Jakarta Digester:

 

用Digester簡化XML配置檔案處理:

http://developer.ccidnet.com/pub/disp/Article?columnID=340&articleID=33259&pageNO=1

 

4.  附錄

Digester,BeanUtils,Collections,Commens-logging下載地址:

 

  Log4J下載地址:

   

 

    Xerces下載地址:

   

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981189/,如需轉載,請註明出處,否則將追究法律責任。

相關文章