首先到http://xstream.codehaus.org下载XStream的最新版本,到目前为止的最新版本为<chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on"></chsdate>1.1.2,主要改变为提供了一些JDK1.5的enum类型支持。下载后,解压,将xstream-1.1.2.jar与xpp3_min-1.1.3.4.I.jar复制到项目的lib中,此时就可以使用XStream了。Xpp3为XStream提供的一个很有效率的XML pull-parser实现,推荐使用,可以提高解析的效率。
一、首先,创建要转换的Java类:
public class Person {
private String firstname;
private String lastname;
private PhoneNumber phone;
private PhoneNumber fax;
// ... constructors and methods
}
public class PhoneNumber {
private int code;
private String number;
// ... constructors and methods
}
注意:这里定义的属性都为private,XStream不限制你的属性的可见性,默认所有属性都会进行转换;XStream不要求你必须要有setter和getter方法,也不要求你要有一个默认的类构造方法。
二、初始化XStream
使用以下的语句进行初始化:
XStream xstream = new XStream();
默认采用Xpp3库,如果你不想使用Xpp3这个库,你也可以使用一个标准的JAXP DOM解析器,可以采用以下语句进行初始化:
XStream xstream = new XStream(new DOMDriver()); //不需要Xpp3库
此xstream实例,为线程安全的,可以供多个线程进行调用,共享使用。
三、注册要转换的类的别名
初始化XStream后,我们要将要转换的类注册到xstream中,告诉XStream,有哪些类要进行XML转换,注册采用以下的语句:
xstream.alias(“person”, Person.class);
xstream.alias(“phonenumber”, PhoneNumber.class);
当然,这一步不是必须的,如果不进行注册的话,XStream默认会在转换时,将对应类全限定名也加入XML文件中,如com.test.Person,这如果在数据量大的时候,会使生成的XML文件增大不少。
四、将对象序列化为XML
到这一步,我们就可以将一个Java对象序列化为一个XML文件了,我们先声明一个Person对象,然后加入两条电话号码对象:
Person person = new Person("Chen", "Tao");
joe.setPhone(new PhoneNumber(123, "1234-456");
joe.setFax(new PhoneNumber(123, "9999-999");
接下来,我们将此Person对象转换为XML字符串:
String xml = xstream.toXML(person);
生成的XML字符串为:
<person></person>
<<person>
<firstname>Chen</firstname>
<lastname>Tao</lastname>
<phone>
<code>123</code>
<number>1234-456</number>
</phone>
<fax>
<code>123</code>
<number>9999-999</number>
</fax>
</person>>
就这么简单,什么映射文件都不用写,默认XStream已经帮我们做好了。
五、从XML反序列化出对象
而从一个XML文件中反序列出一个对象也同样非常简单,我们看一下下面的代码:
Person newPerson = (Person) xstream.fromXML(xml);