国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
使用Digester解析XML文檔示例 - 熊熊樂園-JAVA篇
析XML文檔方面有不少的方法,也有不少的工具包可用,這里介紹的是來自Apache Jakarta的Digester,使用其解析XML文件非常方便而不需要過多的關(guān)心底層的具體解析過程。

  Digester最早出現(xiàn)在Struts中,后來隨著Struts的發(fā)展以及其的公用性而被提到commens中獨(dú)自立項(xiàng),其底層實(shí)現(xiàn)的是SAX解析。當(dāng)前版本為:1.5

http://blog.csdn.net/happyxyzw/archive/2005/09/10/477014.aspx
 

一. 概述

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

  Digester最早出現(xiàn)在Struts中,后來隨著Struts的發(fā)展以及其的公用性而被提到commens中獨(dú)自立項(xiàng),其底層實(shí)現(xiàn)的是SAX解析。當(dāng)前版本為:1.5

  二. 正文

  1. 安裝與配置

  使用Digester需要如下幾個(gè)軟件包:

  Digester ,BeanUtils, Collections, Commens-Logging,還有一個(gè)遵循SAX(Simple API for XML)2.0或JAXP(Java API for XML Parsing) 1.1規(guī)范的XML解析器,如Xerces。相關(guān)下載地址見附錄。如果需要使用log4j做為日志輸出,則亦請(qǐng)下載之。

  將下載來的zip包解壓,并將其中的jar文件拷貝到你的工程文件的lib目錄中,并在工程classpath中包含上述jar文件的路徑。

  在您工程的類目錄(如classes)新建一commons-logging.properties文件,內(nèi)容為:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4Jlogger

  這表明系統(tǒng)將使用log4j做為日志輸出,再建一log4j.proerties文件,內(nèi)容請(qǐng)參看log4j文檔或其他參考資料。

  2. XML文件

  在工程目錄下新建一個(gè)XML文件,示例使用module.xml,內(nèi)容見下:

<?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的使用相當(dāng)簡單,請(qǐng)參看如下的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>參考文獻(xiàn):</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一個(gè)Digester的實(shí)例,并將本類(SampleDigester)的實(shí)例壓入
*Digester的處理堆棧,調(diào)用Digester的addCallMethod方法將XML文件中的特定
*節(jié)點(diǎn)與處理方法聯(lián)系起來,并吊桶addCallParam方法設(shè)置參數(shù),隨后解析給定的XML
*文件。
* @throws IOException IO異常
* @throws SAXException SAX異常
*/

public void run() throws IOException, SAXException{
//新建Digester實(shí)例
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文件中的節(jié)點(diǎn)路徑:<quasar_module><module_info>...
*addModuleInfo為本類中的一個(gè)方法(見下),即當(dāng)碰到<quasar_module><module_info>節(jié)點(diǎn)時(shí)
*調(diào)用addModuleInfo方法,6表示該方法用六個(gè)參數(shù),
*/
digester.addCallMethod("quasar_module/module_info", "addModuleInfo", 6);
//逐個(gè)設(shè)置參數(shù),第一個(gè)參數(shù)的索引為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文件中的內(nèi)容簡單輸出,實(shí)際應(yīng)用中可以將獲得的信息進(jìn)行進(jìn)一步的處理。
*
* @param name 名字
* @param description 描述
* @param version 版本
* @param author 作者
* @param mail EMAIL
* @param updateTime 更新時(shí)間
*/

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的信息,在具體應(yīng)用中可將其加入系統(tǒng)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 );
//生成本類實(shí)例
digester.addObjectCreate( "quasar_module/action_mappings", SampleDigester.class);
//生成ActionMapping實(shí)例
digester.addObjectCreate("quasar_module/action_mappings/action",ActionMapping.class);
//獲取屬性值,并將其存入ActionMapping實(shí)例
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");
//調(diào)用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代碼清單由于過長這里就不給出了,請(qǐng)自行撰寫,只要使其有三個(gè)屬性: name,actionClass,requestPath以及他們的getter、setter方法和toString方法即可。




Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=477014

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
通過struts應(yīng)用mvc設(shè)計(jì)模型
《簡述培訓(xùn)的流程》
Struts初步認(rèn)識(shí)
【新提醒】struts2 jar包說明(轉(zhuǎn))
在resin中使用struts的問題
搞懂 XML 解析,徒手造 WEB 框架
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服