1、下载commons-digester1.6.jar
2、新建一java工程。
3、在模块目录下根据需要建立4个package——action,dto,input,config.
4、在input内存放input.xml文件。其内容如下:
<?xml version="1.0" encoding="UTF-8"?> <root> <models> <model id="0001" name="测试一"> <book id="20091113" name="中国书"/> <book id="20091113" name="中国书"/> <magazine id="2009113" name="中国杂志" time="2009"/> <magazine id="2009113" name="中国杂志" time="2009"/> </model> <model id="0002" name="测试二"> <book id="20091113" name="中国书"/> <book id="20091113" name="中国书"/> <magazine id="2009113" name="中国杂志" time="2009"/> <magazine id="2009113" name="中国杂志" time="2009"/> </model> </models> </root>
5、在dto内新建5个java bean。(根据实际(xml文件)情况而定)。其中包含get,set方法。以及add(下一级节点名称)方法。
5.1、Root.java
package com.test.digester.test.dto;
import java.util.Vector;
public class Root {
private Vector<Models> models = new Vector<Models>();
public Vector<Models> getModels() {
return models;
}
public void setModels(Vector<Models> models) {
this.models = models;
}
public void addModels(Models obj) {
models.addElement(obj);
setModels(this.models);
}
}
5.2、Models.java
package com.test.digester.test.dto;
import java.util.Vector;
public class Models {
private Vector<Model> models = new Vector<Model>();
public Vector<Model> getModels() {
return models;
}
public void setModels(Vector<Model> models) {
this.models = models;
}
public void addModel(Model obj) {
models.addElement(obj);
setModels(this.models);
}
}
5.3、Molde.java
package com.test.digester.test.dto;
import java.util.Vector;
public class Model {
private String id;
private String name;
private Vector<Book> books = new Vector<Book>();
private Vector<Magazine> magazines = new Vector<Magazine>();
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Vector<Book> getBooks() {
return books;
}
public void setBooks(Vector<Book> books) {
this.books = books;
}
public Vector<Magazine> getMagazines() {
return magazines;
}
public void setMagazines(Vector<Magazine> magazines) {
this.magazines = magazines;
}
public void addBook(Book obj) {
books.addElement(obj);
setBooks(this.books);
}
public void addMagazine(Magazine obj) {
magazines.addElement(obj);
setMagazines(this.magazines);
}
}
5.4、Book.java
package com.test.digester.test.dto;
public class Book {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
5.5、Magazine.java
package com.test.digester.test.dto;
public class Magazine {
private String id;
private String name;
private String time;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
6、在config内创建config.xml文件,定义其解析规则:
<?xml version="1.0" encoding="UTF-8"?> <digester-rules> <pattern value="root"> <object-create-rule classname="com.inspur.digester.test.dto.Root" /> </pattern> <pattern value="root/models"> <object-create-rule classname="com.inspur.digester.test.dto.Models" /> <set-next-rule methodname="addModels" /> </pattern> <pattern value="root/models/model"> <object-create-rule classname="com.inspur.digester.test.dto.Model" /> <set-properties-rule > <alias attr-name="id" prop-name="id" /> <alias attr-name="name" prop-name="name" /> </set-properties-rule> <set-next-rule methodname="addModel" /> </pattern> <pattern value="root/models/model/book"> <object-create-rule classname="com.inspur.digester.test.dto.Book" /> <set-properties-rule > <alias attr-name="id" prop-name="id" /> <alias attr-name="name" prop-name="name" /> </set-properties-rule> <set-next-rule methodname="addBook" /> </pattern> <pattern value="root/models/model/magazine"> <object-create-rule classname="com.inspur.digester.test.dto.Magazine" /> <set-properties-rule > <alias attr-name="id" prop-name="id" /> <alias attr-name="name" prop-name="name" /> <alias attr-name="time" prop-name="time" /> </set-properties-rule> <set-next-rule methodname="addMagazine"/> </pattern> </digester-rules>
7、在action内新建一Test.java。内容如下:
package com.test.digester.test.action;
import java.io.File;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import com.test.digester.test.dto.Root;
public class Test {
public static void main(String[] args) {
try {
String inputFile="src/com/test/digester/test/input/input.xml";
String rulesFile="src/com/test/digester/test/config/config.xml";
File input = new File(inputFile);
File rules = new File(rulesFile);
Digester digester = DigesterLoader.createDigester(rules.toURL());
Root root = (Root) digester.parse(input);
System.out.println(root.toString());
} catch (Exception exc) {
exc.printStackTrace();
}
}
}