`
OracleX
  • 浏览: 123551 次
  • 性别: Icon_minigender_1
  • 来自: 地球
社区版块
存档分类
最新评论

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
分享到:
评论

相关推荐

    使用XStream序列化/反序列化对象

    在这个场景中,我们将深入探讨如何使用XStream处理对象的序列化和反序列化。 首先,让我们了解什么是XStream。XStream是由Joe Walnes创建的一个开源项目,它提供了一种简单的方式来将Java对象转换为XML,反之亦然。...

    使用XStream 多集合生成xml

    总之,"使用XStream多集合生成xml"涉及了Java对象到XML的转换,特别是处理多个集合对象的转换。通过XStream提供的API,你可以灵活地控制XML的生成方式,满足各种序列化需求。在实际应用中,确保对XStream的配置和...

    springMVC整合xStream实现对象和xml转换

    4. **对象转换为XML**:在`getXmlResponse()`方法中,创建一个User对象,然后使用XStream将其转换为XML字符串。 ```java User user = new User(); // 初始化user对象... String xmlResponse = xstream.toXML...

    xstream对象与xml转换

    现在,我们可以使用XStream进行对象到XML的转换。首先,创建一个XStream实例,并对其进行配置: ```java XStream xstream = new XStream(); xstream.alias("person", Person.class); // 给类名设置别名,可读性更高...

    Xstream_java对象和xml的互相转换

    在使用 XStream 进行序列化时,我们首先需要创建一个 `XStream` 实例,然后调用 `toXML()` 方法,传入要转换的 Java 对象。这将返回一个表示该对象的 XML 字符串。例如: ```java XStream xstream = new XStream();...

    xstream轻松解析xml到java对象

    XStream支持处理复杂的数据结构,包括集合、数组、嵌套对象等。它会自动递归处理对象树,并生成对应的XML结构。 6. **注解驱动的映射** 自XStream 1.4版本开始,可以使用注解来更精确地控制XML元素和属性的映射,...

    android XMl 解析神奇xstream 二: 把对象转换成xml

    6. **处理复杂的对象结构**:XStream可以处理嵌套的对象和集合。例如,`Person`类包含一个`Address`对象和一个`Contact`列表: ```java public class Address { private String street; private String city; }...

    XStream在Java对象和XML之间相互转换

    它支持基本数据类型、自定义类、集合、Map以及嵌套对象的转换,并且可以通过自定义转换器来处理复杂的数据结构。 3. **kxml2-2.3.0.jar**: KXML2是一个轻量级的XML解析器,适用于Android和Java平台。XStream使用...

    com.thoughtworks.xstream.XStream操作XML和java对象的一些用法

    本篇将详细介绍XStream如何处理XML与Java对象的相互转换,以及如何处理List、Map等集合类型的数据。 首先,XStream是一个强大的库,它由Pete Gyford开发,用于将Java对象序列化为XML,同时也能将XML反序列化为Java...

    使用XStream是实现XML与Java对象的转换(3)--注解

    在“xstream使用3”这个压缩包文件中,可能包含了使用XStream注解实现XML与Java对象转换的示例代码、测试用例以及相关的说明文档。通过对这些文件的深入学习,开发者可以更好地理解如何在实际项目中运用XStream的...

    xstream使用小记

    对于复杂的数据结构,如集合和嵌套对象,Xstream同样能自动处理。 标签“源码”表明我们会关注Xstream的内部实现。Xstream的核心在于其对反射和XML解析的运用。它使用了XPath来定位XML节点,并通过反射来设置或获取...

    好用的xStream XML和JAVA对象互相转换的简单示例

    接下来,我们来看看如何使用XStream进行XML和Java对象的转换。首先,我们需要一个简单的Java对象,例如: ```java public class Person { private String name; private int age; private Address address; //...

    xstream使用案例

    XStream 使用了反射和类型信息来构建 XML 树,并且通过自定义的转换器(converters)处理特定类型的对象。默认情况下,XStream 可以处理大部分基础类型和标准集合框架类。对于自定义类,它会基于类的属性和字段创建 ...

    Java用xStream拼接xml

    Java中的xStream库提供了一个简单易用的方式来将Java对象序列化为XML,反之亦然,即反序列化XML回Java对象。 **xStream简介** xStream是一个开源的Java库,由Johannes Link创建。它提供了简洁、直观的API来处理XML...

    xStream 实现xml与 java对象的转换

    8. **处理集合和数组**:xStream会自动处理List、Set等集合类型的序列化和反序列化,只需确保Java对象中的集合类型已正确映射到XML元素。 9. **安全注意事项**:xStream默认信任所有输入,这可能会导致潜在的安全...

    使用XStream是实现XML与Java对象的转换(5)--Object Stream

    除了基本类型和字符串,XStream还可以处理复杂的对象结构,包括嵌套的对象、集合、甚至自定义的转换规则。例如,你可以通过注册一个Converter来改变默认的序列化行为。 在实际应用中,XStream还提供了许多高级特性...

    XStream Java下的使用

    **XStream Java下的使用** XStream 是一个Java库,它能够将Java对象转换为XML,同时也能将XML数据转换回相应的Java对象。这个强大的库在处理XML序列化和反序列化时提供了简单而直观的API,尤其适用于Android开发中...

    XStream解析XML实例

    这里,`Person`类需要有一个默认构造函数,因为XStream会使用它来创建一个新的对象实例。 **4. 自定义XML输出** 默认情况下,XStream会使用类名作为XML元素名。如果想自定义XML结构,可以使用`asXML()`方法和`@...

    使用XStream是实现XML与Java对象的转换(4)--转换器

    XStream是一个强大的库,专门用于XML与Java对象之间的互相转换。这篇博文将深入探讨如何利用XStream的转换器功能来优化这一过程。 XStream的核心原理是通过反射机制自动将Java对象映射到XML结构,并反之亦然。然而...

    XStream使用方法总结-对象-转换.txt

    ### XStream使用方法总结——对象转换 XStream是一款强大的Java库,主要用于实现Java对象与XML文档之间的相互转换。本文将详细介绍XStream的基本用法、配置选项以及如何利用它来进行对象到XML的序列化和反序列化...

Global site tag (gtag.js) - Google Analytics