XStream使用教程

本文详细介绍了XStream的使用,包括如何创建XStream对象以转换为XML和JSON字符串,设置别名,转化成员为XML属性,处理集合,忽略特定字段,使用注解自定义XML结构,以及将XML字符串反序列化为Java对象。通过实例展示了XStream的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:

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略
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值