简介:
XSteram:将javaBean对象转化为xml对象,Xtream快速且低内存占用
核心包:xstream-*.jar
依赖包:xpp3_min-*.jar
xml转为javabean:xmlpull-*.jar
使用教程:
1.获取XStream对象,可转为xml形式字符串
1.获取xstream对象,转化为xml
XStream xstream = new XStream();
2.转化为xml格式的字符串
String xml = xstream.toXML(javabean);
2.获取XStream对象,可转为json形式字符串
1.获取xstream对象,转化为json
XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
2.转化为xml格式的字符串
String json = xstream.toXML(javabean);
3.默认将javabean的全类名转化为XML节点,可设置别名
xstream.alias(“china”, List.class);
xstream.alias(“province”, Province.class);
xstream.alias(“city”, City.class);
4.默认javabean中的成员会转化为XMl的节点,修改为转化为XML的属性
xstream.useAttributeFor(Province.class, “name”);
5.默认集合会出现无用的类似的信息,可去除
xstream.addImplicitCollection(Province.class, “cityList”);
6.默认将所有javabean属性转化为XML,可去除
xstream.omitField(City.class, “desc”);
7.使用注解的方式进行修改xml
Stream使用注解凡是前需要开启注解
为所有对象开启注解:xstream.autodetectAnnotations(true);
为一个对象开启注解:xstream.processAnnotations(Student.class);
将javabean转化为student元素
@XStreamAlias(value = “student”)
public class Student
将id元素转化为上一级元素的属性
@XStreamAsAttribute
private int id;
去除不需要的元素
@XStreamOmitField
private String desc;
8.将字符串的xml对象转化为javabean对象
需要额外导包:xmlpull-*.jar
// 将xml转化为javabean对象
XStream.setupDefaultSecurity(xstream);
// 没有下面这句会有安全提示.
xstream.allowTypes(new Class[]{ Student.class });
提示:Security framework of XStream not initialized, XStream is probably vulnerable.
List list = (List) xstream.fromXML(xml);
9.范例
package com.zgd.learn_xstream.demo;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
import com.zgd.learn_xstream.doman.City;
import com.zgd.learn_xstream.doman.Province;
import com.zgd.learn_xstream.doman.Student;
public class XStreamDemo
{
public List<Province> getProvinces()
{
Province p1 = new Province("江西", new ArrayList<City>());
p1.addCity(new City("抚州", "fuzhou"));
p1.addCity(new City("南昌", "nanchang"));
Province p2 = new Province("广东", new ArrayList<City>());
p1.addCity(new City("深圳", "shenzhen"));
p1.addCity(new City("广州", "guangzhou"));
List<Province> provinceList = new ArrayList<Province>();
provinceList.add(p1);
provinceList.add(p2);
return provinceList;
}
/**
* 将javabean转化为xml字符串
*/
@Test
public void fun1()
{
// 获取javabean对象
List<Province> provinceList = getProvinces();
// 获取xstream对象
XStream xstream = new XStream();
// 设置别名
xstream.alias("china", List.class);
xstream.alias("province", Province.class);
xstream.alias("city", City.class);
// 将省份属性值改为Province的属性
xstream.useAttributeFor(Province.class, "name");
// 去处无用的集合元素
xstream.addImplicitCollection(Province.class, "cityList");
// 去处无用的元素
xstream.omitField(City.class, "desc");
// 转化为xml格式的字符串
String xml = xstream.toXML(provinceList);
System.out.println(xml);
}
/**
* 将javabean转化为JSON对象
*/
@Test
public void fun2()
{
// 获取javabean对象
List<Province> provinceList = getProvinces();
// 获取xstream对象
XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
// 转化为xml格式的字符串
String xml = xstream.toXML(provinceList);
System.out.println(xml);
}
/**
* 使用注解的方式将javabean对象转化为xml
*/
@Test
public void fun3()
{
Student s1 = new Student(1, "zs", "张三");
Student s2 = new Student(1, "ls", "李四");
Student s3 = new Student(1, "ww", "王五");
List<Student> students = new ArrayList<Student>();
students.add(s1);
students.add(s2);
students.add(s3);
XStream xstream = new XStream();
// 使用注解方式一
// xstream.autodetectAnnotations(true);
// 使用注解方式二
xstream.processAnnotations(Student.class);
String xml = xstream.toXML(students);
System.out.println(xml);
}
}
@XStreamAlias(value = "student")
public class Student
{
@XStreamAsAttribute
private int id;
private String name;
@XStreamOmitField
private String desc;
// 构造/get/set略
}