快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

葡京娱乐场真人秀_龟发之家论坛



一. 概述

解析XML文档方面有不少的措施,也有不少的对象包可用,这里先容的是来自Apache Jakarta的Digester,应用其解析XML文件异常方便而不必要过多的关心底层的详细解析历程。

Digester最早呈现在Struts中,后来跟着Struts的成长以及其的公用性而被提到commens中独自主项,其底层实现的是SAX解析。当前版本为:1.5

二. 正文

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 ofwww.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( alker@skyinn.org )

* <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 = ne葡京娱乐场真人秀w 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");

//调用Sam葡京娱乐场真人秀pleDigester的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措施即可。

您可能还会对下面的文章感兴趣: