待读取的XML文件father.xml:
<?xml version="1.0"?>
<fathers>
<father name="Tom">
<child name="Ken" age="18" sex="male"/>
<child name="Lily" age="15" sex="fmale"/>
</father>
<father name="Tyler">
<child name="Gen" age="28" sex="fmale"/>
<child name="Jim" age="15" sex="male"/>
</father>
</fathers>
father下有一个属性name,还有child元素. child有三个属性name, age, sex.
创建XML所对应的java bean, Father.java, Child.java:
public class Father {
private String name;
private Vector<Child> childs;
public Father() {
childs = new Vector<Child>();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Vector<Child> getChilds() {
return childs;
}
public void setChilds(Vector<Child> childs) {
this.childs = childs;
}
public void addChild(Child child) {
this.getChilds().add(child);
}
public String toString() {
String newline = System.getProperty("line.separator");
StringBuffer buff = new StringBuffer();
if (childs != null) {
for (Child c : childs) {
buff.append("name:").append(c.getName()).append(" age:")
.append(c.getAge()).append(" Sex:").append(c.getSex())
.append(newline);
}
}
return "Father : name=" + name + newline + buff.toString();
}
}
public class Child {
private String name;
private String age;
private String sex;
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
解析这个XML文件,新建一个类SampleDigester.java:
import java.io.IOException;
import java.util.Vector;
import org.apache.commons.digester.Digester;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xml.sax.SAXException;
/**
* class SampleDigester
* @author xiaoqing.yu
*/
public class SampleDigester {
/** log */
protected static final Log log = LogFactory.getLog(SampleDigester.class);
/** fathers */
private Vector<Father> fathers;
/**
* Default constructor.
*/
public SampleDigester() {
fathers = new Vector<Father>();
}
/**
* @param args
*/
public static void main(String[] args) {
SampleDigester sd = new SampleDigester();
sd.digester();
log.info(sd);
}
private void digester() {
Digester digester = new Digester();
digester.push(this);
// 当遇到<fathers>的子元素<father>时创建一个Father对象,并将其放在栈顶
digester.addObjectCreate("fathers/father", Father.class);
/*
* 根据<father>的属性(attribute),对刚创建的Father对象的属性(property)进行设置
*
* param 1: XML中所对应的节点
* param 2: 这个节点所对应的属性
* param 3: 所对应java bean中的属性
* 后面两个参数不写, 则自动匹配.
*/
digester.addSetProperties("fathers/father", "name", "name");
// 当遇到<father>的子元素<child>时创建一个Father对象,并将其放在栈顶
digester.addObjectCreate("fathers/father/child", Child.class);
// 同father节点属性设置.
digester.addSetProperties("fathers/father/child");
/* 当再次遇到<father>的子元素<child>时调用第二栈顶元素(Father对象)的addChild方法 */
digester.addSetNext("fathers/father/child", "addChild");
/* 当再次遇到<father>元素<child>时调用栈顶元素(SampleDigester对象)的addFather方法 */
digester.addSetNext("fathers/father", "addFather");
try {
digester.parse("src/test/struts/digester/demo3/father.xml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @return the fathers
*/
public Vector<Father> getFathers() {
return fathers;
}
/**
* @param fathers the fathers to set
*/
public void setFathers(Vector<Father> fathers) {
this.fathers = fathers;
}
/**
* addFather
* @param father
*/
public void addFather(Father father) {
this.getFathers().add(father);
}
/**
* Method toString
* @Override
*/
public String toString() {
String newline = System.getProperty("line.separator");
StringBuffer buff = new StringBuffer();
if (this.getFathers() != null) {
for(Father f : this.getFathers()) {
buff.append(newline).append(f);
}
}
return buff.toString();
}
}
打印出来的结果应该是:
Father : name=Tom
name:Ken age:18 Sex:male
name:Lily age:15 Sex:fmale
Father : name=Tyler
name:Gen age:28 Sex:fmale
name:Jim age:15 Sex:male
分享到:
相关推荐
博文链接:https://aga.iteye.com/blog/218587
digester解析xml的问题.pdf
Digester解析XML文件
使用Apache的Digester来解析XML文档,代码,有解析!
不错的解析XML的类,主要利用org.apache.commons.digester.Digester;
使用Digester解析XML文档示例
java反射,Digester解析xml文档
使用STRUTS的解析XML技术digester来解析多层嵌套的XML文件,简单易懂
Digester解析XML,也是找到的别人的。
这是一个JAVA工程,导入后可直接运行,主要演示如何用digester解析XML文件
Digester解析XML问题.pdf
Digester java解析xml jar包
使用digester配置rule.xml规则来解析自定义的xml文件
org.apache.commons.digester解析XML.rar 完整的测试工程,里面有需要的四个包
digeter解析xml所必须的jar包,包括commons-logging-1.2.jar、commons-digester-2.1.jar、commons-beanutils-1.9.3.jar
Digester使用堆栈来保存xml节点(stack.push()方法),当该xml节点中嵌套的所有子节点解析完毕,该节点将被弹出(stack.pup()方法)。Digester最大的优点就是使用模式匹配来表示xml文件中节点之间的父子关系 。
digester组件简化了xml文件处理操作
Digester的XML规则文件配置: 在Digester中提供了一个包:org.apache.commons.digester.xmlrules。这个包中的类可以从一个XML文档中读取并返回一个指定的配置信息。XML文档配置文件必须使用DTD,这是xmlrules包的一...
Digester digester = DigesterLoader.createDigester(TestDigester.class.getClassLoader().getResource(Constants.CONFIG_MAPPINGRULE_PATH)); digester.setValidating(false);