XStream集合对象使用

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值