4.3.2 XStream的使用
XStream是Thoughtworks公司发布的一个开源Java类库,能够实现XML和Java对象之间的转换。XStream的使用非常简单,不需要预先生成相关的辅助类,也不需要依赖于任何映射文件,它还有着很强的扩展功能。在本书中笔者使用的是XStream1.3.1,它的下载地址是http://xstream.codehaus.org/download.html。
下面是一个使用XStream实现XML和Java对象之间相互转换的示例程序。
- 1 import com.thoughtworks.xstream.XStream;
- 2 import com.thoughtworks.xstream.io.xml.DomDriver;
- 3
- 4 /**
- 5 * XStream的使用示例
- 6 *
- 7 * @author liufeng
- 8 * @date 2013-09-12
- 9 */
- 10 public class XStreamTest {
- 11 /**
- 12 * Java对象转化为XML
- 13 *
- 14 * @param person Java对象
- 15 * @return
- 16 */
- 17 public static String javaObject2Xml(Person person) {
- 18 XStream xs = new XStream(new DomDriver());
- 19 // 给Person类定义别名
- 20 xs.alias("person", person.getClass());
- 21 return xs.toXML(person);
- 22 }
- 23
- 24 /**
- 25 * XML转换为Java对象
- 26 *
- 27 * @param xml
- 28 * @return
- 29 */
- 30 public static Object xml2JavaObject(String xml) {
- 31 XStream xs = new XStream(new DomDriver());
- 32 xs.alias("person", Person.class);
- 33 Person person = (Person) xs.fromXML(xml);
- 34 return person;
- 35 }
- 36
- 37 public static void main(String[] args) {
- 38 // 构建Person对象
- 39 Person p1 = new Person();
- 40 p1.setName("柳峰");
- 41 p1.setSex("男");
- 42 p1.setAddress("新疆福海县解乡");
- 43 // 将p1对象转换成XML字符串
- 44 System.out.println(javaObject2Xml(p1));
- 45
- 46 // 构造XML字符串
- 47 String xml = "<person><name>路遥</name><sex>男</sex><address>贵州贵阳
- </address></person>";
- 48 // 将XML字符串转换成Person对象
- 49 Person p2 = (Person) xml2JavaObject(xml);
- 50 // 输出:路遥 男 贵州贵阳
- 51 System.out.println(p2.getName() + " " + p2.getSex() + " " + p2.getAddress());
- 52 }
- 53 }
- 54
- 55 // 定义Person类
- 56 class Person {
- 57 private String name;
- 58 private String sex;
- 59 private String address;
- 60
- 61 public String getName() {
- 62 return name;
- 63 }
- 64
- 65 public void setName(String name) {
- 66 this.name = name;
- 67 }
- 68
- 69 public String getSex() {
- 70 return sex;
- 71 }
- 72
- 73 public void setSex(String sex) {
- 74 this.sex = sex;
- 75 }
- 76
- 77 public String getAddress() {
- 78 return address;
- 79 }
- 80
- 81 public void setAddress(String address) {
- 82 this.address = address;
- 83 }
- 84 }
上面程序的运行结果如图4-10所示。
图4-10 XStream示例程序的运行结果
默认情况下,使用XStream转换Java对象得到的XML文档根节点为完整的Java类名。例如,笔者将上面的XStreamTest类放在com.liufeng.course.test包下,在main()方法中将p1对象转换成XML字符串的输出结果应该像下面这样:
- <com.liufeng.course.test.Person>
- <name>柳峰</name>
- <sex>男</sex>
- <address>新疆福海县解乡</address>
- </com.liufeng.course.test.Person>
为什么图4-10中的XML根节点是person而不是com.liufeng.course.test.Person呢?这是因为在XStreamTest类的第20行为Person类设置了别名person,如下所示:
- xs.alias("person", person.getClass());