在xml和javabean之间可以方便的相互转换。
bean和xml的转换,Sun对javabean的应用加了不少限制,
有很重要一条,就是bean的属性名制约。
但是RT的工具包,可以实现换名转换。
此功能十分灵巧方便,只要另写一份配置文件即可。
代码上来:
Root.java
package in;
import java.util.ArrayList;
public class Root {
public Root(){}
private ArrayList<Foo> foos = new ArrayList<Foo>();
public ArrayList<Foo> getFoos() {
return foos;
}
public void setFoos(ArrayList<Foo> foos) {
this.foos = foos;
}
//重点是这个方法,不能漏掉
public void addFoo(Foo foo) {
foos.add(foo);
}
}
Foo.java
package in;
public class Foo {
private String yuck;
public Foo() {
}
public Foo(String yuck) {
this.yuck = yuck;
}
public String getYuck() {
return yuck;
}
public void setYuck(String yuck) {
this.yuck = yuck;
}
}
Root.betwixt:
<?xml version="1.0" encoding="UTF-8"?>
<info primitiveType="element">
<element name="Root">
<element name="Foo" property="foos" />
<addDefaults/>
</element>
</info>
Foo.betwixt:
<?xml version="1.0" encoding="UTF-8"?>
<info primitiveType="element">
<element name="Foo">
<element name="Yuck" property="yuck" />
<addDefaults/>
</element>
</info>
这里的结构是Root Bean里含有一个List属性的子Bean.
这样做,更具有一般性。
Bean向xml写文件:
StringWriter sw = new StringWriter();
sw.write("<?xml version='1.0' ?>/n");
BeanWriter bw = new BeanWriter(sw);
bw.getBindingConfiguration().setMapIDs(false);
bw.enablePrettyPrint();
Root root = new Root();
ArrayList<Foo> foo = new ArrayList<Foo>();
foo.add(new Foo("Yuck001"));
foo.add(new Foo("Yuck002"));
foo.add(new Foo("Yuck003"));
root.setFoos(foo);
bw.write("Root", root);
FileWriter fw = new FileWriter(new File("a.xml"));
fw.append(sw.toString());
fw.flush();
fw.close();
从xml那里读到bean里:
BeanReader beanReader = new BeanReader();
beanReader.registerBeanClass("Root", Root.class);
Root root = (Root) beanReader.parse(new File("a.xml"));
ArrayList<Foo> foos = root.getFoos();
for (Foo foo: foos) {
System.out.println(foo.getYuck());
}