锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍍忚礙鍡e悓錛屽儚鎭烘拻澶у笣錛屽儚澶忔槑緲扳︹︹︹?br />鎴戜負浠涔堝氨涓嶈兘鏍戠珛涓涓敋鑷沖彲浠ヤ負姝や粯鍑虹敓鍛界殑鐞嗘兂鍛紒
榪欐槸鎬庝箞鍥炰簨鍟婏紵
鎴戝緱鐞嗘兂鍛紵鎴戠殑浼熷ぇ鐩爣鎬庝箞涓嶈浜嗭紵
鎴戜互鍓嶆槸鏈夌悊鎯籌紝鏈夌洰鏍囩殑 涓婂鍓嶇殑鐞嗘兂鏄斺斺斺斿綋瀹?br />鎴戣寰楀皬鏃跺欑埛鐖峰ザ濂舵暀鑲叉垜鏃跺氨鏄ソ濂藉涔狅紝闀垮ぇ褰撳畼錛岃嚦浜庡綋瀹樺悗騫插悧錛熶笉鐭ラ亾錛佷負浠涔堝綋瀹橈紵涓嶇煡閬撱?br />涓嶈繃榪欎釜鐞嗘兂鎸佺畫鍒板皬瀛︿竴騫寸駭灝辮鎺ㄧ炕浜嗐?br />涓婂鍚庤佸笀灝辮濂藉ソ瀛︿範錛屼互鍚庡綋縐戝瀹舵垨鑰呬互鍚庡疄鐜板叡浜т富涔夛紝鎴戦潬 榪欎釜甯藉瓙鐩糕斺斿綋鐨勫ぇ鍟娿傛洿鏄壇娣$殑鐞嗘兂銆傚氨涓轟簡褰撲釜縐戝瀹舵潵濂藉ソ瀛︿範錛?br />铏界劧鎶婂綋瀹樻帹緲諱簡錛屽彲鏄綋縐戝瀹朵笌鍏變駭涓諱箟閮芥病鏈夎兘澶熷崰棰嗘垜蹇冧腑鐞嗘兂鐨勯珮鍦般?br />涓婁簡楂樹腑灝卞熀鏈笂褰誨簳娌℃湁鐞嗘兂浜嗐傛湁鐨勮佸笀绔熶細璇達紝濂藉ソ瀛︿範鍚э紝涓婁簡澶у浣犲繖灝卞彲浠ュ敖鎯呯殑鐜╀簡銆?br />鍛靛懙錛屽璇變漢鐨勮泲緋曞晩銆傚彲鏄病鏈変漢鍛婅瘔鎴戝悆瀹岃泲緋曞悗鏈夊姏姘斾簡錛屽簲璇ュ共鐐瑰暐錛?img src ="http://www.tkk7.com/chaor/aggbug/35812.html" width = "1" height = "1" />
]]>
1銆佸姛鑳界畝榪幫細瑙f瀽xml鏂囦歡錛?/P>
2銆佺幆澧冮厤緗細鎵闇瑕佺敤鍒扮殑jar鍖吤?/P>
銆銆Digester鐨勮繍琛屼緷璧栦笅鍒楀寘錛?/P>
涓涓伒寰狫axp(1.1鐗堟湰鍙婁互鍚?鐨刋ML瑙f瀽鍣?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銆佹槸鍚﹀彲榪涜灝佽錛氬彲浠ヨ繘琛屽皝瑁咃紝浣嗘垜娌¤瘯榪?/P>
5銆佽皟鐢ㄦ濊礬錛?BR> 璇誨彇閰嶇疆鏂囦歡鏃朵嬌鐢ㄣ?/P>
6銆佷唬鐮佺ず渚嬶細
鏈唬鐮佸泭鎷簡xml鐨勫ぇ澶氭暟鍩烘湰鎯呭喌鍖呮嫭灞炴у?濡傦細penson鐨刬d錛夊崟涓鑺傜偣鍊鹼紙濡傦細name錛夛紝娣峰悎鑺傜偣鍊鹼紙濡傦細email錛?/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();
//涓嬮潰鐨勪袱涓柟娉曠殑鍚嶅瓧涓璼et浠ュ悗鐨勯儴鍒嗭紝涓?lt;person>鐨勫睘鎬у悕瀛楀鏄犮傚綋浠巟ml鏂囦歡涓瘑鍒嚭<person>鐨勫睘鎬ф椂錛屽鏋滄湁瑕佹眰(鍗寵皟鐢ㄨ繃addSetProperties鏂規硶),Digester浼氫緷鎹繖縐嶅鏄犲叧緋昏嚜鍔ㄨ皟鐢ㄧ浉搴旂殑鏂規硶銆?BR> public void setId(int id) {
this.id = id;
}
public void setCategory(String category) {
this.category = category;
}
//瀵筺ame鑰岃█錛屽洜涓哄叾鍊兼潵鑷?lt;name>鏍囩鐨勫唴瀹硅岄潪灞炴у鹼紝闇瑕佺敤addCallMethod鎸囧畾璇嗗埆<name>鍚庣殑瑕佽皟鐢ㄦ鏂規硶(鎯寵嚜鍔ㄨ皟鐢ㄤ篃瑕佸彲浠ワ紝闇瑕乤ddBeanPropertySetter錛屽弬瑙佺涓嬩竴涓緥瀛?銆?BR> public void setName(String name) {
this.name = name;
}
//鍚宯ame錛屾鏃惰繕瑕佷竴涓鎸囧畾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];
// 鍒涘緩涓涓狣igester瀹炰緥
Digester d = new Digester();
// 鍒涘緩AddressBook瀹炰緥錛屽茍灝嗗叾鍘嬪叆鏍堥《銆?BR> AddressBook book = new AddressBook();
d.push(book);
// 澧炲姞瑙勫垯
addRules(d);
// 澶勭悊杈撳叆鐨剎ml鏂囦歡
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>鏃訛紝鍒涘緩綾籔erson鐨勪竴涓疄渚嬶紝騫跺皢鍏跺帇鍏ユ爤欏?BR> d.addObjectCreate("address-book/person", Person.class);
// 灝?lt;person>鏍囩鐨勫睘鎬?attribute)涓庢爤欏禤erson綾誨璞$殑灞炴?property)璁劇疆鏂規硶鏍規嵁鍚勮嚜鐨勫悕瀛楄繘琛屾槧灝勶紝(渚嬪錛屽皢鏍囩灞炴d涓庡睘鎬ц緗柟娉晄etId榪涜鏄犲皠錛屽皢鏍囩灞炴ategory涓庡睘鎬ц緗柟娉晄etCategory榪涜鏄犲皠)錛岀劧鍚庡皢灞炴х殑鍊間綔鍙傛暟浼犻掔粰鎵ц鐩稿簲鐨勬柟娉曘?BR> // 濡傛灉鏌愭爣絳懼睘鎬ф病娉曢氳繃鍚嶅瓧鎵懼埌鐩稿簲鐨勫睘鎬ц緗柟娉曪紝鍒欐鏍囩灞炴ц蹇界暐(濡俥xample.xml涓涓涓?lt;person>鐨則ry灞炴?銆?BR> d.addSetProperties("address-book/person");
// 璋冪敤絎簩鏍堥《瀵硅薄(AddressBook瀹炰緥)鐨刟ddPerson鏂規硶錛屼互鏍堝璞?Person瀹炰緥)鐨勫璞′負鍙傛暟
d.addSetNext("address-book/person", "addPerson");
// 褰撻亣鍒?lt;person>鐨勫瓙鍏冪礌<name>鏃訛紝璋冪敤鏍堥《瀵硅薄(Person瀹炰緥)鐨剆etName鏂規硶銆?BR> // 姝ゅaddCallMethod鏂規硶鐨勭涓鍙傛暟鏄鍒欙紝絎簩涓弬鏁版槸鏂規硶鐨勫悕瀛楋紝絎笁涓槸鍙傛暟鐨勬暟閲?涓?鏃訛紝琛ㄧず鍙湁涓涓弬鏁幫紝涓斿弬鏁扮殑鍊兼槸鍏冪礌鐨勫唴瀹?
d.addCallMethod("address-book/person/name", "setName", 0);
// 褰撻亣鍒?lt;person>鐨勫瓙鍏冪礌<email>鏃訛紝璋冪敤鏍堥《瀵硅薄(Person瀹炰緥)鐨刟ddEmail鏂規硶,addEmail鏂規硶鏈変袱涓弬鏁幫紝鍙栧煎垎鍒潵鑷?lt;email>鐨勫睘鎬ype鐨勫煎拰<email>鏈韓鐨勫唴瀹廣?BR> // 姝ゅ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