commons-digester-1.7.jar
1、功能简述:解析xml文件;
2、环境配置:所需要用到的jar包÷
Digester的运行依赖下列包:
一个遵循Jaxp(1.1版本及以后)的XML解析器 xerces.jar
Jakarta commons beanutils包 commons-beanutils.jar (1.5版本及以后)
Jakarta commons collections包 commons-collections-3.1.jar(2.1版本及以后)
Jakarta commons logging包 commons-logging-1.0.4.jar(1.0.2版本及以后)
一个简单的例子
3、使用限制:无平台限制(没有测试过)
4、是否可进行封装:可以进行封装,但我没试过
5、调用思路:
读取配置文件时使用。
6、代码示例:
本代码囊括了xml的大多数基本情况包括属性值(如:penson的id)单一节点值(如:name),混合节点值(如:email)
***********Example.xml**********
<address-book>
<person id="1" category="acquaintance" try="would be ignored">
<name>Gonzo</name>
<email type="business">gonzo@muppets.com</email>
<gender result="the whole tag would be ignored">male</gender>
</person>
<person id="2" category="rolemodel">
<name>Kermit</name>
<email type="business">kermit@muppets.com</email>
<email type="home">kermie@acme.com</email>
</person>
</address-book>**********Person.java************
import java.util.HashMap;
import java.util.Iterator;
public class Person {
private int id;
private String category;
private String name;
private HashMap emails = new HashMap();
//下面的两个方法的名字中set以后的部分,与<person>的属性名字对映。当从xml文件中识别出<person>的属性时,如果有要求(即调用过addSetProperties方法),Digester会依据这种对映关系自动调用相应的方法。
public void setId(int id) {
this.id = id;
}
public void setCategory(String category) {
this.category = category;
}
//对name而言,因为其值来自<name>标签的内容而非属性值,需要用addCallMethod指定识别<name>后的要调用此方法(想自动调用也要可以,需要addBeanPropertySetter,参见第下一个例子)。
public void setName(String name) {
this.name = name;
}
//同name,此时还要一一指定addEmail的参数值的来源。
public void addEmail(String type, String address) {
emails.put(type, address);
}
public void print() {
System.out.println("Person #" + id);
System.out.println(" category=" + category);
System.out.println(" name=" + name);
for(Iterator i = emails.keySet().iterator(); i.hasNext(); ) {
String type = (String) i.next();
String address = (String) emails.get(type);
System.out.println(" email (type " + type + ") : " + address);
}
}
}
**********AddressBook.java***********
import java.util.LinkedList;
import java.util.Iterator;
public class AddressBook {
LinkedList people = new LinkedList();
public void addPerson(Person p) {
people.addLast(p);
}
public void print() {
System.out.println("Address book has " + people.size() + " entries");
for(Iterator i = people.iterator(); i.hasNext(); ) {
Person p = (Person) i.next();
p.print();
}
}
}
************AddressBookDigester*********
import org.apache.commons.digester.Digester;
/**
* Usage: java Example1 example.xml
*/
public class AddressBookDigester {
public static void main(String[] args) {
if (args.length != 1) {
usage();
System.exit(-1);
}
String filename = args[0];
// 创建一个Digester实例
Digester d = new Digester();
// 创建AddressBook实例,并将其压入栈顶。
AddressBook book = new AddressBook();
d.push(book);
// 增加规则
addRules(d);
// 处理输入的xml文件
try {
java.io.File srcfile = new java.io.File(filename);
d.parse(srcfile);
}
catch(java.io.IOException ioe) {
System.out.println("Error reading input file:" + ioe.getMessage());
System.exit(-1);
}
catch(org.xml.sax.SAXException se) {
System.out.println("Error parsing input file:" + se.getMessage());
System.exit(-1);
}
// 将解析出的地址数据打印出来
book.print();
}
private static void addRules(Digester d) {
// 当遇到<person>时,创建类Person的一个实例,并将其压入栈顶
d.addObjectCreate("address-book/person", Person.class);
// 将<person>标签的属性(attribute)与栈顶Person类对象的属性(property)设置方法根据各自的名字进行映射,(例如,将标签属性id与属性设置方法setId进行映射,将标签属性category与属性设置方法setCategory进行映射),然后将属性的值作参数传递给执行相应的方法。
// 如果某标签属性没法通过名字找到相应的属性设置方法,则此标签属性被忽略(如example.xml中第一个<person>的try属性)。
d.addSetProperties("address-book/person");
// 调用第二栈顶对象(AddressBook实例)的addPerson方法,以栈对象(Person实例)的对象为参数
d.addSetNext("address-book/person", "addPerson");
// 当遇到<person>的子元素<name>时,调用栈顶对象(Person实例)的setName方法。
// 此处addCallMethod方法的第一参数是规则,第二个参数是方法的名字,第三个是参数的数量(为0时,表示只有一个参数,且参数的值是元素的内容)
d.addCallMethod("address-book/person/name", "setName", 0);
// 当遇到<person>的子元素<email>时,调用栈顶对象(Person实例)的addEmail方法,addEmail方法有两个参数,取值分别来自<email>的属性type的值和<email>本身的内容。
// 此处addCallParam方法的第一参数是规则,第二个参数是指明被调用方法(addEmail)参数的序号,第三个是参数为字符串时指属性的名字)
d.addCallMethod("address-book/person/email", "addEmail", 2);
d.addCallParam("address-book/person/email", 0, "type");
d.addCallParam("address-book/person/email", 1);
}
private static void usage() {
System.out.println("Usage: java Example1 example.xml");
}
}
Address book has 2 entries
Person #1
category=acquaintance
name=Gonzo
email (type business) : gonzo@muppets.com
Person #2
category=rolemodel
name=Kermit
email (type business) : kermit@muppets.com
email (type home) : kermie@acme.com
参考:http://www.blogjava.net/chaor/archive/2005/11/30/21975.html
分享到:
相关推荐
在标题和描述中提到的"commons-digester-1.7.jar.zip"是一个包含Apache Commons Digester 1.7版本的压缩文件,它包含了`commons-digester-1.7.jar`库本身以及相关的`commons-digester-1.7.jar.license.txt`文件,后...
本文将围绕标题"quartz-1.6.0/commons-beanutils/commons-digester-1.7 JAR包"展开,详细阐述这些JAR包在Spring中的作用,以及它们各自的核心知识点。 首先,`quartz-1.6.0.jar`是Quartz Scheduler的一个版本。...
1. **JAR文件**:包含所有编译好的类和库,这是实际使用的部分,开发者会将它添加到项目类路径中,以便在代码中引用和使用Commons Digester的功能。 2. **源代码**(如果包含):可能包括Java源文件,允许开发者...
commons-codec-1.7.jar commons-collections-3.2.1.jar commons-dbcp-1.4.jar commons-digester-2.1.jar commons-jexl-2.1.1.jar commons-lang-2.6.jar commons-logging-1.1.1.jar commons-net-ftp-2.0.jar commons-...
commons-digester-1.7.jar commons-logging-1.0.4.jar icu4j-4_8.jar jakarta-regexp-1.4.jar junit-4.7.jar lucene-analyzers-3.3.0.jar lucene-benchmark-3.3.0.jar lucene-core-3.3.0.jar lucene-demo-3.3.0.jar ...
commons-digester-1.7.jar commons-fileupload-1.2.1.jar commons-logging-1.0.4.jar freemarker-2.3.15.jar groovy-all-1.5.5.jar iText-2.1.7.jar iTextAsian.jar jasperreports-3.7.1.jar log4j-1.2.15.jar ognl-...
commons-digester-1.7.jar commons-digester.jar commons-javaflow-20060411.jar commons-logging-1.0.2.jar commons-logging-api-1.0.2.jar commons-pool-1.3.jar dom4j-1.6.jar ehcache-1.1.jar freemarker-2.3.8....
commons-digester-2.1.jar, commons-fileupload-1.3.2.jar, commons-io-2.4.jar, commons-lang-2.4.jar, commons-lang3-3.4.jar, commons-logging-1.1.3.jar, dwr-1.1.1.jar, ezmorph-1.0.6.jar, freemarker-2.3.23....
commons-digester3-3.2-bin.zip commons-discovery-0.5-bin.zip commons-el-1.0.zip commons-email-1.2-bin.zip commons-exec-1.1-bin.zip commons-fileupload-1.2.2-bin.zip commons-io-2.4-bin.zip commons-jci-...
aopalliance-1.0.jar,asm-5.1.jar,asm-commons-5.1.jar,asm-tree-5.1.jar,bsh-2.0b4.jar,classworlds-1.1.jar,commons-beanutils-1.9.2.jar,commons-collections-3.2.1.jar,commons-digester-2.1.jar,commons-...
用EXCELUTILS导出excel所需的JAR包:excelutils.jar poi-2.5.1.jar commons-logging.jar commons-digester.jar commons-beanutils.jar,加外可能还需加添加osh.jar包。将上述jar包加入自己的web工程的classpath中
quartz-1.6.0.jar 集成了quartz发现不执行job,也没有错误信息,搞了半天缺少依赖包 ...commons-digester-1.7.jar commons-logging-api.jar commons-modeler-1.1.jar commons-pool-1.2.jar commons-validator-1.1.4.jar
- commons-digester-1.7.jar:用于解析配置文件。 - commons-logging-1.0.4.jar:日志记录框架。 - iText-2.1.7.jar:用于生成PDF文档。 - iTextAsian.jar:支持亚洲语言的iText扩展。 - iText-rtf-2.1.7.jar:用于...
- commons-digester-1.7.jar - commons-logging-1.0.2.jar - commons-logging-api-1.0.2.jar - itext-1.3.1.jar - jasperreports-1.3.3.jar - jdt-compiler-3.1.1.jar - jxl-2.6.jar - png-encoder-1.5.jar - poi-...
同时,为了保证正常运行,还需要`Apache Commons`的相关组件,例如`commons-collections-2.1.jar`, `commons-logging-1.0.2.jar`, `commons-digester-1.7.jar`, `Commons-beanutils-1.7.jar`。此外,JasperReports的...
6. commons-digester-1.7.jar - Apache Commons Digester是一个解析XML文档并根据规则将其转换为对象结构的库,可能在JasperReports的XML报表定义解析中发挥作用。 7. commons-logging-1.0.2.jar - Apache Commons ...
jasperreports 最新 4.01 jasperreports-4.0.1.jar groovy-all-1.7.5.jar iText-2.1.7.jar commons-beanutils-1.8.0.jar commons-collections-2.1.1.jar commons-digester-1.7.jar commons-logging-1.0.4.jar
commons-digester-1.8.jar commons-lang-2.2.jar commons-logging-1.1.jar velocity-1.7.jar velocity-tools-2.0.jar 2.web.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns...