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是由Joe Walnes创建的一个开源项目,它提供了一种简单的方式来将Java对象转换为XML,反之亦然。...
总之,"使用XStream多集合生成xml"涉及了Java对象到XML的转换,特别是处理多个集合对象的转换。通过XStream提供的API,你可以灵活地控制XML的生成方式,满足各种序列化需求。在实际应用中,确保对XStream的配置和...
4. **对象转换为XML**:在`getXmlResponse()`方法中,创建一个User对象,然后使用XStream将其转换为XML字符串。 ```java User user = new User(); // 初始化user对象... String xmlResponse = xstream.toXML...
现在,我们可以使用XStream进行对象到XML的转换。首先,创建一个XStream实例,并对其进行配置: ```java XStream xstream = new XStream(); xstream.alias("person", Person.class); // 给类名设置别名,可读性更高...
在使用 XStream 进行序列化时,我们首先需要创建一个 `XStream` 实例,然后调用 `toXML()` 方法,传入要转换的 Java 对象。这将返回一个表示该对象的 XML 字符串。例如: ```java XStream xstream = new XStream();...
它支持基本数据类型、自定义类、集合、Map以及嵌套对象的转换,并且可以通过自定义转换器来处理复杂的数据结构。 3. **kxml2-2.3.0.jar**: KXML2是一个轻量级的XML解析器,适用于Android和Java平台。XStream使用...
XStream支持处理复杂的数据结构,包括集合、数组、嵌套对象等。它会自动递归处理对象树,并生成对应的XML结构。 6. **注解驱动的映射** 自XStream 1.4版本开始,可以使用注解来更精确地控制XML元素和属性的映射,...
6. **处理复杂的对象结构**:XStream可以处理嵌套的对象和集合。例如,`Person`类包含一个`Address`对象和一个`Contact`列表: ```java public class Address { private String street; private String city; }...
本篇将详细介绍XStream如何处理XML与Java对象的相互转换,以及如何处理List、Map等集合类型的数据。 首先,XStream是一个强大的库,它由Pete Gyford开发,用于将Java对象序列化为XML,同时也能将XML反序列化为Java...
在“xstream使用3”这个压缩包文件中,可能包含了使用XStream注解实现XML与Java对象转换的示例代码、测试用例以及相关的说明文档。通过对这些文件的深入学习,开发者可以更好地理解如何在实际项目中运用XStream的...
对于复杂的数据结构,如集合和嵌套对象,Xstream同样能自动处理。 标签“源码”表明我们会关注Xstream的内部实现。Xstream的核心在于其对反射和XML解析的运用。它使用了XPath来定位XML节点,并通过反射来设置或获取...
接下来,我们来看看如何使用XStream进行XML和Java对象的转换。首先,我们需要一个简单的Java对象,例如: ```java public class Person { private String name; private int age; private Address address; //...
XStream 使用了反射和类型信息来构建 XML 树,并且通过自定义的转换器(converters)处理特定类型的对象。默认情况下,XStream 可以处理大部分基础类型和标准集合框架类。对于自定义类,它会基于类的属性和字段创建 ...
Java中的xStream库提供了一个简单易用的方式来将Java对象序列化为XML,反之亦然,即反序列化XML回Java对象。 **xStream简介** xStream是一个开源的Java库,由Johannes Link创建。它提供了简洁、直观的API来处理XML...
8. **处理集合和数组**:xStream会自动处理List、Set等集合类型的序列化和反序列化,只需确保Java对象中的集合类型已正确映射到XML元素。 9. **安全注意事项**:xStream默认信任所有输入,这可能会导致潜在的安全...
XStream是一个强大的库,专门用于XML与Java对象之间的互相转换。这篇博文将深入探讨如何利用XStream的转换器功能来优化这一过程。 XStream的核心原理是通过反射机制自动将Java对象映射到XML结构,并反之亦然。然而...
除了基本类型和字符串,XStream还可以处理复杂的对象结构,包括嵌套的对象、集合、甚至自定义的转换规则。例如,你可以通过注册一个Converter来改变默认的序列化行为。 在实际应用中,XStream还提供了许多高级特性...
**XStream Java下的使用** XStream 是一个Java库,它能够将Java对象转换为XML,同时也能将XML数据转换回相应的Java对象。这个强大的库在处理XML序列化和反序列化时提供了简单而直观的API,尤其适用于Android开发中...
这里,`Person`类需要有一个默认构造函数,因为XStream会使用它来创建一个新的对象实例。 **4. 自定义XML输出** 默认情况下,XStream会使用类名作为XML元素名。如果想自定义XML结构,可以使用`asXML()`方法和`@...
### XStream使用方法总结——对象转换 XStream是一款强大的Java库,主要用于实现Java对象与XML文档之间的相互转换。本文将详细介绍XStream的基本用法、配置选项以及如何利用它来进行对象到XML的序列化和反序列化...