java simpleXml序列化反序列化小例子

本文介绍了一个使用Simple Framework XML进行Java对象序列化和反序列化的完整示例。示例中创建了Customer、Address、Order和Item等类,并通过CustomerTest类实现了对象到XML文件的转换及反向操作。



Customer.java

package com.fei;

import java.util.ArrayList;
import java.util.List;

import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;

@Root
public class Customer {

	//@Element(required = true) 默认为true
	//@Element(type = void.class) 默认为void 
	@Element 
	private String code;
	@Element
	private String name;
	@Element
	private Address address;
	@ElementList(required = false,type = Order.class)
	private List<Order> orders = new ArrayList<Order>();
	
	public Customer(){
		super();
	}
	
	public Customer(String code, String name, Address address,
			List<Order> orders) {
		super();
		this.code = code;
		this.name = name;
		this.address = address;
		this.orders = orders;
	}
	
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		this.address = address;
	}
	public List<Order> getOrders() {
		return orders;
	}
	public void setOrders(List<Order> orders) {
		this.orders = orders;
	}
}

Address.java

package com.fei;

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root
public class Address {

	@Element
	private String code;
	@Element
	private String name;
	
	public Address(){
		super();
	}
	public Address(String code,String name){
		super();
		this.code = code;
		this.name = name;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

Order.java

package com.fei;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;

@Root
public class Order {

	@Element
	private String code;
	@Element
	private Date date;
	@ElementList(required = false,type = Item.class)
	private List<Item> items = new ArrayList<Item>();
	
	public Order(){
		super();
	}
	public Order(String code, Date date, List<Item> items) {
		super();
		this.code = code;
		this.date = date;
		this.items = items;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	public List<Item> getItems() {
		return items;
	}

	public void setItems(List<Item> items) {
		this.items = items;
	}
	
	
}

Item.java

package com.fei;

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root
public class Item {

	@Element
	private String code;
	@Element
	private String name;
	@Element
	private int quatity;
	
	public Item(){
		super();
	}
	public Item(String code, String name, int quatity) {
		super();
		this.code = code;
		this.name = name;
		this.quatity = quatity;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getQuatity() {
		return quatity;
	}

	public void setQuatity(int quatity) {
		this.quatity = quatity;
	}

	
	
	
}

CustomerTest.java

package test;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

import com.fei.Address;
import com.fei.Customer;
import com.fei.Item;
import com.fei.Order;

public class CustomerTest {

	public static void main(String[] args) throws Exception{
		Customer customer = create();
		String filePath = "d:/customerOrder.xml";
		//序列化,把对象转为xml
		write(customer,filePath);
		//反序列化,xml转为对象
		read(filePath);
	}
	

	private static  Customer create(){
		List<Item> items = new ArrayList<Item>();
		Item item1 = new Item("apple","苹果",5);
		Item item2 = new Item("banana","香蕉",3);
		Item item3 = new Item("grape","葡萄",6);
		items.add(item1);
		items.add(item2);
		items.add(item3);
		
		List<Order> orders = new ArrayList<Order>();
		Order order1 = new Order("order001",new Date(),items);
		orders.add(order1);
		
		Address address = new Address("888888","深圳科技园xx");
		
		Customer customer = new Customer("1001","张三",address,orders);
		
		return customer;
	}
	
	private static void write(Customer customer,String filePath) throws Exception{
		File file = new File(filePath);
		Serializer serializer = new Persister();
		serializer.write(customer,file);
	}
	
	private static void read(String filePath) throws Exception{
		File file = new File(filePath);
		
		Serializer serializer = new Persister();
		Customer customer = serializer.read(Customer.class, file);
		
		print(customer);
	}
	
	private static void print(Customer customer){
		System.out.println("--"+customer.getCode());
		System.out.println("--"+customer.getName());
		System.out.println("--"+customer.getAddress().getName());
		
		for(Order order : customer.getOrders()){
			System.out.println("----"+order.getCode());
			System.out.println("----"+order.getDate());
			for(Item item : order.getItems()){
				System.out.println("------"+item.getCode());
				System.out.println("------"+item.getName());
				System.out.println("------"+item.getQuatity());
			}
		}
	}
}

运行结果:

--1001
--张三
--深圳科技园xx
----order001
----Wed Jun 18 09:37:30 CST 2014
------apple
------苹果
------5
------banana
------香蕉
------3
------grape
------葡萄
------6

生成的customerOrder.xml文件

<customer>
   <code>1001</code>
   <name>张三</name>
   <address>
      <code>888888</code>
      <name>深圳科技园xx</name>
   </address>
   <orders class="java.util.ArrayList">
      <order>
         <code>order001</code>
         <date>2014-06-18 09:37:30.114 CST</date>
         <items class="java.util.ArrayList">
            <item>
               <code>apple</code>
               <name>苹果</name>
               <quatity>5</quatity>
            </item>
            <item>
               <code>banana</code>
               <name>香蕉</name>
               <quatity>3</quatity>
            </item>
            <item>
               <code>grape</code>
               <name>葡萄</name>
               <quatity>6</quatity>
            </item>
         </items>
      </order>
   </orders>
</customer>



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值