XStream是一个Java对象和XML相互转换的工具,提供了所有的基础类型、数组、集合等类型直接转换的支持.XStream对象相当Java对象和XML之间的转换器,转换过程是双向.使用XStream
不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream
序列化的类不需要实现 Serializable 接口。XStream 是一种序列化工具而不是数据绑定工具,就是说不能从 XML 或者 XML Schema
Definition (XSD) 文件生成类。
和其他序列化工具相比,XStream 有三个突出的特点:
XStream
不关心序列化/逆序列化的类的字段的可见性。
序列化/逆序列化类的字段不需要 getter 和 setter 方法。
序列化/逆序列化的类不需要有默认构造函数。
不需要修改类,使用 XStream 就能直接序列化/逆序列化任何第三方类
Address.java
public class Address {
private int id;
private String add;
private String zipcode;
public Address(int id, String add, String zipcode) {
this.id = id;
this.add = add;
this.zipcode = zipcode;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAdd() {
return add;
}
public void setAdd(String add) {
this.add = add;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}
Person.java
import java.util.List;
public class Person {
private int id;
private int sex;
private int age;
private String name;
private List<Address> addList;
public Person(int id, int sex, int age, String name, List<Address> addList) {
this.id = id;
this.sex = sex;
this.age = age;
this.name = name;
this.addList = addList;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<Address> getAddList() {
return addList;
}
public void setAddList(List<Address> addList) {
this.addList = addList;
}
}
集合对象转换成XML:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class List2XML {
public static void main(String args[]) {
XStream xs = new XStream(new DomDriver());
Address address1 = new Address(001, "经三路", "450000");
Address address2 = new Address(002, "朝阳区", "10000");
List<Address> list = new ArrayList<Address>();
list.add(address1);
list.add(address2);
Person person = new Person(001, 1, 26, "spark", list);
xs.alias("person", Person.class); // 类别名
xs.alias("address", Address.class);
xs.aliasField("addressList", Person.class, "addList"); // 类成员别名
xs.aliasField("addressId", Address.class, "id");
xs.useAttributeFor(Address.class, "zipcode"); // 设置某个节点为父节点上的一个属性
// xs.aliasField("ZipCode", Address.class, "zipcode"); 与下面效果一样
xs.aliasAttribute(Address.class, "zipcode", "ZipCode");
File file=new File("d:/temp/List2XML.xml");
if(!file.exists()||!file.isDirectory()){
String location=file.getAbsolutePath();
String[] arry=location.split("\\\\");
File file1=new File(arry[0]+"/"+arry[1]);
file1.mkdir();
}
try {
FileOutputStream fos=new FileOutputStream(file);
OutputStreamWriter osw=new OutputStreamWriter(fos,Charset.forName("utf-8"));
BufferedWriter bw=new BufferedWriter(osw);
xs.toXML(person,bw);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
结果:
<person>
<id>1</id>
<sex>1</sex>
<age>26</age>
<name>spark</name>
<addressList>
<address ZipCode="450000">
<addressId>1</addressId>
<add>经三路</add>
</address>
<address ZipCode="10000">
<addressId>2</addressId>
<add>朝阳区</add>
</address>
</addressList>
</person>
XML转换成集合对象:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.List;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class XML2List {
public static void main(String args[]){
XStream xs=new XStream(new DomDriver());
File file=new File("d:/temp/List2XML.xml");
try {
FileInputStream fis=new FileInputStream(file);
xs.alias("person", Person.class);
xs.alias("address", Address.class);
xs.aliasAttribute(Person.class,"addList", "addressList");
xs.aliasAttribute(Address.class, "id", "addressId");
xs.aliasAttribute(Address.class, "zipcode", "ZipCode"); //前后顺序无关
xs.useAttributeFor(Address.class, "zipcode");
Person person=(Person) xs.fromXML(fis);
System.out.println("name="+person.getName());
List list=person.getAddList();
Iterator iter=list.iterator();
Address add;
System.out.println("地址信息:");
while(iter.hasNext()){
add=(Address) iter.next();
System.out.println(add.getAdd());
System.out.println(add.getZipcode());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
结果:
name=spark
地址信息:
经三路
450000
朝阳区
10000
更多内容请访问:http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html
分享到:
相关推荐
Java对象转换成XML字符串 将List集合转换成xml文档 Map集合转换xml文档 用InputStream将XML文档转换成java对象
XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了所有的基础类型、数组、集合等类型直接转换的支持
xml-pull-1.3.1.jar工具类,xstream-1.3.jar,XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了所有的基础类型、数组、集合等类型直接转换的支持。 因此XML常用于数据交换、对象序列化(这种序列化和...
XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了所有的基础类型、数组、集合等类型直接转换的支持。 因此XML常用于数据交换、对象序列化. Stream对象相当Java对象和XML之间的转换器,转换过程是...
XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了所有的基础类型、数组、集合等类型直接转换的支持。因此XML常用于数据交换、对象序列化(这种序列化和Java对象的序列化技术有着本质的区别)。Xstream...
XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了所有的基础类型、数组、集合等类型直接转换的支持。因此XML常用于数据交换、对象序列化(这种序列化和Java对象的序列化技术有着本质的区别)。
XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了所有的基础类型、数组、集合等类型直接转换的支持。因此XML常用于数据交换、对象序列化(这种序列化和Java对象的序列化技术有着本质的区别)。
16.7.2 使用Spring Servlet API模拟对象 16.7.3 使用Spring RestTemplate测试 16.7.4 使用Selenium测试 16.8 小结 第17章 实战案例开发 17.1 论坛案例概述 17.1.1 论坛整体功能结构 17.1.2 论坛用例描述 17.1.3 主要...
16.7.2 使用Spring Servlet API模拟对象 16.7.3 使用Spring RestTemplate测试 16.7.4 使用Selenium测试 16.8 小结 第17章 实战案例开发 17.1 论坛案例概述 17.1.1 论坛整体功能结构 17.1.2 论坛用例描述 17.1.3 主要...
12.5 xStream 12.6 本章小结 第四篇 Android应用开发案例 第13章 Ksoap2 13.1 SOAP协议 13.1.1 请求 13.1.2 响应 13.2 WSDL介绍 13.3 Ksoap2应用——天气预报 13.4 Ksoap2参数类型 13.4.1 CXF框架的Web Service ...