??xml version="1.0" encoding="utf-8" standalone="yes"?>
像K嗣同Q像恺撒大帝Q像夏明………?br />我ؓ什么就不能树立一个甚臛_以ؓ此付出生命的理想呢!
q是怎么回事啊?
我得理想呢?我的伟大目标怎么不见了?
我以前是有理惻I有目标的 上学前的理想是————当?br />我记得小时候爷爷奶奶教育我时就是好好学习,长大当官Q至于当官后q吗Q不知道Qؓ什么当官?不知道?br />不过q个理想持箋到小学一qp推翻了?br />上学后老师p好好学习Q以后当U学家或者以后实现共产主义,我靠 q个帽子相——当的大啊。更是扯淡的理想。就Z当个U学家来好好学习Q?br />虽然把当官推MQ可是当U学家与׃M都没有能够占领我心中理想的高地?br />上了高中基本上d没有理想了。有的老师竟会_好好学习吧,上了大学你忙可以尽情的玩了?br />呵呵Q多׃h的蛋p啊。可是没有h告诉我吃完蛋p后有力气了Q应该干点啥Q?img src ="http://www.aygfsteel.com/chaor/aggbug/35812.html" width = "1" height = "1" />
]]>
1、功能简qͼ解析xml文gQ?/P>
2、环境配|:所需要用到的jar包?/P>
Digester的运行依赖下列包Q?/P>
一个遵循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、用限Ӟ无^台限Ӟ没有试q)
4、是否可q行装Q可以进行封装,但我没试q?/P>
5、调用思\Q?BR> d配置文g时用?/P>
6、代码示例:
本代码囊括了xml的大多数基本情况包括属性?如:penson的idQ单一节点|如:nameQ,混合节点|如:emailQ?/P>
***********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以后的部分,?lt;person>的属性名字对映。当从xml文g中识别出<person>的属性时Q如果有要求(卌用过addSetPropertiesҎ),Digester会依据这U对映关p自动调用相应的Ҏ?BR> public void setId(int id) {
this.id = id;
}
public void setCategory(String category) {
this.category = category;
}
//对name而言Q因为其值来?lt;name>标签的内容而非属性|需要用addCallMethod指定识别<name>后的要调用此Ҏ(惌动调用也要可以,需要addBeanPropertySetterQ参见第下一个例??BR> public void setName(String name) {
this.name = name;
}
//同nameQ此时还要一一指定addEmail的参数值的来源?BR> 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实例Qƈ其压入栈顶?BR> AddressBook book = new AddressBook();
d.push(book);
// 增加规则
addRules(d);
// 处理输入的xml文g
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) {
// 当遇?lt;person>Ӟ创徏cPerson的一个实例,q将其压入栈?BR> d.addObjectCreate("address-book/person", Person.class);
// ?lt;person>标签的属?attribute)与栈Personcd象的属?property)讄ҎҎ各自的名字进行映,(例如Q将标签属性id与属性设|方法setIdq行映射Q将标签属性category与属性设|方法setCategoryq行映射)Q然后将属性的g参数传递给执行相应的方法?BR> // 如果某标{ֱ性没法通过名字扑ֈ相应的属性设|方法,则此标签属性被忽略(如example.xml中第一?lt;person>的try属??BR> d.addSetProperties("address-book/person");
// 调用W二栈顶对象(AddressBook实例)的addPersonҎQ以栈对?Person实例)的对象ؓ参数
d.addSetNext("address-book/person", "addPerson");
// 当遇?lt;person>的子元素<name>Ӟ调用栈顶对象(Person实例)的setNameҎ?BR> // 此处addCallMethodҎ的第一参数是规则,W二个参数是Ҏ的名字,W三个是参数的数??Ӟ表示只有一个参敎ͼ且参数的值是元素的内?
d.addCallMethod("address-book/person/name", "setName", 0);
// 当遇?lt;person>的子元素<email>Ӟ调用栈顶对象(Person实例)的addEmailҎ,addEmailҎ有两个参敎ͼ取值分别来?lt;email>的属性type的值和<email>本n的内宏V?BR> // 此处addCallParamҎ的第一参数是规则,W二个参数是指明被调用方?addEmail)参数的序PW三个是参数为字W串时指属性的名字)
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