使用Digester解析XML文件示例 (轉)
使用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,內容見下:
<!--模組資訊-->
<>walker@skyinn.org
<!--Action對映資訊-->
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
*/
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 批量拆分XML文件示例KGXML
- 單一XML文件拆分示例SHXML
- 用Java結合SAX 2.0 解析XML文件 (轉)JavaXML
- Java中Dom解析xml文件JavaXML
- 使用JAXP對xml文件進行DOM解析基礎XML
- 使用PHP DOM-XML建立和解析XML檔案 (轉)PHPXML
- 使用jdom解析XMLXML
- C# 讀取XML文件 (轉)C#XML
- 用JDOM處理XML文件 (轉)XML
- java使用sax解析xmlJavaXML
- XSLT實現XML文件轉換成HTML文件XMLHTML
- [轉]使用 SAX 處理 XML 文件 和與DOM的區別XML
- XML - JAXB示例XML
- XML - StAX示例XML
- commons-digester 使用規則檔案時解析錯誤問題
- 使用DocumentBuilderFactory解析XML淺談UIXML
- 使用 Java 解析XML檔案JavaXML
- python使用SAX解析xmlPythonXML
- XML的JAVA 解析(一)(1) (轉)XMLJava
- XML的JAVA 解析(一)(3) (轉)XMLJava
- XML的JAVA 解析(一)(2) (轉)XMLJava
- XML的JAVA 解析(一)(4) (轉)XMLJava
- XML的JAVA 解析(一)(5) (轉)XMLJava
- Xml解析XML
- XML輕鬆學習手冊(6)XML例項解析(轉)XML
- XML Schema 複雜元素型別詳解:定義及示例解析XML型別
- 使用dom4j 解析, 操作XMLXML
- 使用Dom4j解析XML案例XML
- JAVA-使用SAX解析XML資料JavaXML
- Android中XML的解析--使用PULLAndroidXML
- Delphi6/7 中XML 文件的應用 (轉)XML
- 學習 XSLT:XML文件轉換的關鍵XML
- Spring 文件 - 示例Spring
- iOS – XML解析iOSXML
- go 解析xmlGoXML
- xml php 解析XMLPHP
- iOS - XML解析iOSXML
- 【Java】解析xmlJavaXML