1.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student>
<name>Tom</name>
<course>JSP</course>
</student>
<student>
<name>Mary</name>
<course>J2EE</course>
</student>
</students>
2.硬编码形式实现
Student类
package com.tongda.whl.digester;
public class Student {
private String name;
private String course;
public void setName(String name){
this.name=name;
}
public void setCourse(String course){
this.course=course;
}
public String getName(){
return this.name;
}
public String getCourse(){
return this.course;
}
}
处理类
package com.tongda.whl.digester;
import org.apache.commons.digester.*;
import org.apache.commons.logging.*;
import java.io.IOException;
import java.util.Vector;
import org.apache.commons.digester.xmlrules.*;
import org.xml.sax.SAXException;
public class DigestTest {
private Log log=LogFactory.getLog(this.getClass());
private Vector students;
public DigestTest(){
students= new Vector(5);
}
public void addStudent( Student student){
students.add( student);
}
public String toString(){
return ((Student)students.get(0)).getName();
}
public void digest(){
//digest2.0支持jdk1.5,并且依赖 logging 1.1.1 和 beanutils 1.8.0
//创建实例
Digester digester= new Digester();
//将初始对象压入digester的stack
digester.push( this);
//指明匹配模式和要创建的类
digester.addObjectCreate( "students/student", Student.class);
//设置对象属性
// digester
digester.addBeanPropertySetter( "students/student/name");
digester.addBeanPropertySetter( "students/student/course");
//当移动到下一个标签中时的动作
digester.addSetNext( "students/student", "addStudent");
try {
//解析,xml文件放在classpath下
DigestTest ds= (DigestTest)digester.parse( getClass().getClassLoader().getResourceAsStream( "students.xml"));
log.info(ds);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]){
DigestTest test=new DigestTest();
test.digest();
}
}
结果显示:Tom
3.配置文件方式实现
配置文件:studentsRule.xml
<?xml version="1.0"?>
<digester-rules>
<pattern value="students">
<object-create-rule classname="com.tongda.whl.digester.Students" />
<set-properties-rule />
<pattern value="student">
<object-create-rule classname="com.tongda.whl.digester.Student" />
<bean-property-setter-rule pattern="name"/>
<bean-property-setter-rule pattern="course"/>
<set-next-rule methodname="addStudent" />
</pattern>
</pattern>
</digester-rules>
Student类
package com.tongda.whl.digester;
public class Student {
private String name;
private String course;
public void setName(String name){
this.name=name;
}
public void setCourse(String course){
this.course=course;
}
public String getName(){
return this.name;
}
public String getCourse(){
return this.course;
}
}
Students类
package com.tongda.whl.digester;
import java.util.Vector;
public class Students {
private Vector students;
public Students(){
students= new Vector(5);
}
public void addStudent( Student student){
students.add( student);
}
public String toString(){
return ((Student)students.get(0)).getName();
}
}
处理类
- package com.tongda.whl.digester;
- import org.apache.commons.digester.*;
- import org.apache.commons.logging.*;
- import java.io.IOException;
- import java.util.Vector;
- import org.apache.commons.digester.xmlrules.*;
- import org.xml.sax.SAXException;
- public class DigestTest {
- private Log log=LogFactory.getLog(this.getClass());
- public void digestByConfig(){
- Digester digester = DigesterLoader.createDigester(this.getClass().getClassLoader().getResource("studentsRule.xml"));
- try {
- Students a= (Students)digester.parse( this.getClass().getClassLoader().getResourceAsStream("students.xml"));
- System.out.println(a);
- log.info(a);
- } catch (IOException e) {
- e.printStackTrace();
- } catch (SAXException e) {
- e.printStackTrace();
- }
- }
- public static void main(String args[]){
- DigestTest test=new DigestTest();
- test.digestByConfig();
- }
- }
结果显示:Tom