org.apache.commons.digester这个包提供了一个工具,可以很迅速的将一个xml文件转换为一个bean。
下面的这个例子,包括有2个bean文件,一个xml文件,一个java主处理文件。
2个bean的代码如下:
package test.digester;
import java.util.ArrayList;
import java.util.List;
public class Foo {
private List<Bar> bars;
private String name;
public void addBar(Bar bar){
if (bars==null){
bars = new ArrayList<Bar>();
}
bars.add(bar);
}
public List getBars() {
return bars;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString(){
String str = "";
str = "name=" + getName() + ";";
List list = getBars();
if (list==null){
return str;
}
int len = list.size();
String bar = "";
for(int i=0;i<len;i++){
Bar b = (Bar)getBars().get(i);
bar = bar + "{"+b.toString()+"},";
}
if (bar.length()>0){
str = str + "["+bar.substring(0, bar.length() - 1)+"]";
}
return str;
}
}
package test.digester;
public class Bar {
private String id;
private String title;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String toString(){
String str = "";
str = "id="+getId()+";title="+getTitle()+";";
return str;
}
}
这个2个bean中的toString方法,我是为了能够方便的看出转换后的内容是否正确而添加的。
还有一个xml文件也是放在包test.digester中,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<foo name="The Parent">
<bar id="123" title="The First Child"/>
<bar id="456" title="The Second Child"/>
<bar id="789" title="测试"/>
</foo>
最后就是这个主处理文件:
代码如下:
package test.digester;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;
public class DigesterTest {
private Digester digester;
private static String filepath = "test/digester/test.xml";
public DigesterTest(){
this.init();
}
private void init(){
digester = new Digester();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource(filepath);
Foo foo = new Foo();
digester.setValidating(false);
digester.push(foo);
digester.addSetProperties("foo");
digester.addObjectCreate("foo/bar", "test.digester.Bar");
digester.addSetProperties("foo/bar");
digester.addSetNext("foo/bar", "addBar", "test.digester.Bar");
try{
digester.parse(url);
System.out.println(foo);
}
catch(IOException e){
System.out.println(e);
}
catch(SAXException e){
System.out.println(e);
}
}
public static void main(String[] args){
DigesterTest test = new DigesterTest();
}
}
这里的init方法也是可以写成:
digester = new Digester();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource(filepath);
digester.setValidating(false);
digester.addObjectCreate("foo", "test.digester.Foo");
digester.addSetProperties("foo");
digester.addObjectCreate("foo/bar", "test.digester.Bar");
digester.addSetProperties("foo/bar");
digester.addSetNext("foo/bar", "addBar", "test.digester.Bar");
try{
Foo foo = (Foo)digester.parse(url);
System.out.println(foo);
}
catch(IOException e){
System.out.println(e);
}
catch(SAXException e){
System.out.println(e);
}
第一种是先new一个Foo,然后把这个Foo对象push到digester中去,最后在parse转换之后,直接处理这个Foo对象就可以了。
第二种方式是digester.addObjectCreate("foo", "test.digester.Foo");就是将Foo类的name传入,在parse中就会根据这个名字转换得到一个Foo对象,我们只要把返回结果转换为Foo就OK了。
在Struts1.3.9中作者是采用的push方法的,digester中还有其他的处理方法的,需要的时候可以自己找资料研究一下。
分享到:
相关推荐
利用Digester把XML转换成为Java对象
使用Apache的Digester来解析XML文档,代码,有解析!
Digester java解析xml jar包
博文链接:https://aga.iteye.com/blog/218587
Apache xml转换java对象 Digester
Digester的XML规则文件配置: 在Digester中提供了一个包:org.apache.commons.digester.xmlrules。这个包中的类可以从一个XML文档中读取并返回一个指定的配置信息。XML文档配置文件必须使用DTD,这是xmlrules包的一...
digester解析xml的问题.pdf
Digester读取xml教程.rar
不错的解析XML的类,主要利用org.apache.commons.digester.Digester;
Digester读取XML学习,Digester读取XML学习
使用digester配置rule.xml规则来解析自定义的xml文件
Digester解析XML,也是找到的别人的。
Digester使用堆栈来保存xml节点(stack.push()方法),当该xml节点中嵌套的所有子节点解析完毕,该节点将被弹出(stack.pup()方法)。Digester最大的优点就是使用模式匹配来表示xml文件中节点之间的父子关系 。
Digester解析XML文件
digester组件简化了xml文件处理操作
java 解析xml文件 digester 将xml转换为java数据 digester jar 包