XStream的简单使用

参考

  • http://x-stream.github.io/tutorial.html xstream官方教程
  • http://www.cnblogs.com/LiZhiW/p/4313493.html#_label3 xstream基本的教程

简单介绍

  • XStream是一个简单的将javabean转换为XML形式的框架,非常的简单方便,同时对于注解也是支持的,也是很简单!

实战

依赖

<dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.9</version>
</dependency>
下面的这个依赖之前介绍过!
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.6</version>
</dependency>

第一个例子

package test;
import com.thoughtworks.xstream.XStream;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;/*** Created by wangji on 2017/3/20.*/@Slf4j
@Data
@Accessors(chain = true)
public class Person   {private String name;private String old;public static void main(String[] args) {XStream xstream = new XStream();Person person = new Person().setOld("old").setName("name");String xml = xstream.toXML(person);log.info(xml);}
}

输出结果:

<test.Person>//类名称,要想从新命名可以的<name>name</name><old>old</old>
</test.Person>

从新命名包名称

@Slf4j
@Data
@Accessors(chain = true)
public class Person   {private String name;private String old;public static void main(String[] args) {XStream xStream = new XStream();Person person = new Person().setOld("old").setName("name");xStream.alias("package",Person.class);//重新命名类xStream.aliasField("nameString",Person.class,"name");//为类的字段重新命名String xml = xStream.toXML(person);log.info(xml);}
}

输出结果:

<package><nameString>name</nameString><old>old</old>
</package>

除了这个还有这个!
xstream.omitField(Person.class, “friends”);把字段节点隐藏
Xstream.addImplicitCollection()省略集合根节点,看参考的文档

Xstream注解

一般的注解

package test;import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;/*** Created by wangji on 2017/3/23.*/
@Data
@Accessors(chain = true)
@Slf4j
@XStreamAlias("student-ww")
public class Student {@XStreamAlias("name-ww")private String name;@XStreamAlias("old-ww")private String old;public static void main(String[] args) {XStream xstream = new XStream();xstream.processAnnotations(Student.class);Student student = new Student().setOld("old").setName("name");log.info(xstream.toXML(student));}
}

输出结果:

<student-ww><name-ww>name</name-ww><old-ww>old</old-ww>
</student-ww>

省略集合根节点:@XStreamImplicit
隐藏字段:@XStreamOmitField

设置转换器

@XStreamConverter(),转换器的意思就是在输出前做个处理。

@Data
@Accessors(chain = true)
@Slf4j
@XStreamAlias("student-ww")
public class Student {@XStreamAlias("name-ww")private String name;@XStreamAlias("old-ww")private String old;@XStreamConverter(value=BooleanConverter.class,booleans={false},strings={"男","女"})private boolean sex;public static void main(String[] args) {XStream xstream = new XStream();xstream.processAnnotations(Student.class);Student student = new Student().setOld("old").setName("name").setSex(true);log.info(xstream.toXML(student));}
}

输出结果:

 <student-ww><name-ww>name</name-ww><old-ww>old</old-ww><sex>男</sex>
</student-ww>

自定义一个转换器

package test;import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;/*** Created by wangji on 2017/3/23.*/
public class StudentConvert implements Converter {//定义转换器能转换的JavaBean类型public boolean canConvert(Class aClass) {return aClass.isAssignableFrom(Student.class);}把对象序列化成XMLpublic void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext marshallingContext) {Student student = (Student) value;writer.startNode("姓名");writer.setValue(student.getName());writer.endNode();writer.startNode("年龄");writer.setValue(student.getOld()+"");writer.endNode();writer.startNode("转换器");writer.setValue("自定义的转换器");writer.endNode();}//把XML反序列化成对象public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader, UnmarshallingContext unmarshallingContext) {return null;}}

使用转换器

@Data
@Accessors(chain = true)
@Slf4j
@XStreamAlias("student-ww")
public class Student {@XStreamAlias("name-ww")private String name;@XStreamAlias("old-ww")private String old;public static void main(String[] args) {XStream xstream = new XStream();xstream.processAnnotations(Student.class);Student student = new Student().setOld("old").setName("name");xstream.registerConverter(new StudentConvert());log.info(xstream.toXML(student));}
}
因为被覆盖了,所以无效!
<student-ww><姓名>name</姓名><年龄>old</年龄><转换器>自定义的转换器</转换器>
</student-ww>

Xstream对象流

输出流的意思,就是输出结果的意思,我们可以随意的输出各种结果:
http://x-stream.github.io/objectstream.html

package test;import com.thoughtworks.xstream.XStream;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;import java.io.IOException;
import java.io.ObjectOutputStream;/*** Created by wangji on 2017/3/20.*/@Slf4j
@Data
@Accessors(chain = true)
public class Person  {private String name;private String old;public static void main(String[] args) {try {XStream xStream = new XStream();Person person = new Person().setOld("old").setName("name");ObjectOutputStream out = xStream.createObjectOutputStream(System.out);out.writeObject(person);out.writeObject("Hello");out.writeInt(12345);out.close();} catch (IOException e) {e.printStackTrace();}}
}

输出结果:

<object-stream><test.Person><name>name</name><old>old</old></test.Person><string>Hello</string><int>12345</int>
</object-stream>

利用对象流增加XML声明

利用继承的特性,覆盖掉父类的toXML(Object obj, Writer writer),先输出一部分的xml的声明;

/*** Created by wangji on 2017/3/23.* 增加XML声明,默认XStream是没有XML声明的*/
public class XmlUtf8Xstream extends XStream {/*** xml版本号,默认1.0*/private String version;/*** xml编码,默认UTF-8*/private String encoding;public XmlUtf8Xstream() {this("1.0","UTF-8");}//XML的声明public String getDeclaration() {return "< ?xml version=\"" + this.version + "\" encoding=\"" + this.encoding + "\"? >\n";}public XmlUtf8Xstream(String version, String encoding) {this.version = version;this.encoding = encoding;}/*** 覆盖父类的方法,然后调用父类的,输出的时候先输出这个XML的声明* @param obj* @param output*/@Overridepublic void toXML(Object obj, OutputStream output){try {String dec = this.getDeclaration();byte[] bytesOfDec = dec.getBytes("UTF-8");output.write(bytesOfDec);} catch (Exception e) {throw new RuntimeException("error", e);}super.toXML(obj, output);}@Overridepublic void toXML(Object obj, Writer writer) {try {writer.write(getDeclaration());} catch (Exception e) {throw new RuntimeException("error", e);}super.toXML(obj, writer);}}

例子:


@Slf4j
@Data
@Accessors(chain = true)
public class Person   implements PersonIn {private String name;private String old;public static void main(String[] args) {XStream xStream = new XmlUtf8Xstream();xStream.alias("package",Person.class);Person person = new Person().setOld("old").setName("name");log.info(xStream.toXML(person));}
}

输出结果:

< ?xml version="1.0" encoding="UTF-8"?>
<package><name>name</name><old>old</old>
</package>

XStream的简单使用相关推荐

  1. XStream生成简单的XMl文件2

    1.新建RequestInfo.java文件: package com.saicfc.pmpf.resume.ccb.utils;/*** 支付查询请求信息* @author lizhiyong* @ ...

  2. XStream将XML转换为JAVA对象快速指南

    XStream是一套简单实用的JAVA类库,它用于序列化对象和XML对象之间互相转换.由于XStream配置简单,灵活易用,因此在XML对象和JAVA对象序列化市场上有很大的空间.本文并不会对XStr ...

  3. xstream操作xml

    一.基本使用 (1)Xstream介绍 Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射 ...

  4. 《大数据》2015年第3期“网络大数据专题”——从系统角度审视大图计算

    从系统角度审视大图计算 吴城文,张广艳,郑纬民 (清华大学计算机科学与技术系 北京 100084) 摘要:大图计算已经成为学术界和工业界的一种基本计算模式,并且已经被应用到许多实际的大数据计算问题上, ...

  5. 一次代码重构之旅-快速读写xml文件工具类封装

    为了满足系统的灵活性,有些功能经常需要用到配置文件,一般是xml格式的居多.如何能快速读写配置文件呢? 以前都是用dom4j提供的api来读写xml文件,用dom4j读写配置文件总感觉像是在结构化的处 ...

  6. 最受欢迎的Java第三方库

    目录 前言 Core核心库 HTML, XML解析 Web框架 图标,报表,图形 窗口库 GUI框架 自然语言处理 静态分析 JSON 数学 日志 Office相关 日期和时间 数据库 开发工具 前言 ...

  7. JAVA Bean和XML之间的相互转换 - XStream简单入门

    JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...

  8. xstream java_XStream将java转化成xml的简单使用

    XStream可以用来将java实体转化成xml形式的字符串, 也可以将xml文档的字符串读取成java实体. jar包依赖地址 com.thoughtworks.xstream xstream ${ ...

  9. 看看XStream注解

    前文展示了使用别名更改XML展示内容,在这一节,可以使用注解更简单的更改XML展示. (1)最简单的注解示例 1. 输出响应消息 package com.favccxx.favsoft.pojo; p ...

最新文章

  1. CentOS下安装ZooKeeper
  2. 一种投影法的点云目标检测网络
  3. extjs window显示在顶层
  4. 物联网产品:你需要知道的9种智能家居产品
  5. 阿里云开发大会——体验云效智能代码补全
  6. SSM项目spring配置文件详细步骤(分门别类、灵巧记忆)
  7. ManicTime软件破解
  8. charles 安装 ssl_「从零开始Python爬虫」1.7.1 Charles的安装与配置
  9. 信息学奥赛一本通C++语言——1008:计算(a+b)/c的值
  10. apt java8_Ubuntu 18.04安装Java JDK8三种方式
  11. 另一种思路比较2个日期是否相等的方式
  12. Windows Azure 配置Active Directory 主机(1)
  13. 数电educoder的verilog参考答案
  14. coreldraw x4如何重叠图片_怎么用CDR x4(coreldraw x4)裁剪图片?x4怎么自动抠图
  15. Pytorch入门教程学习笔记(六)循环神经网络RNN(学周杰伦写歌)
  16. fun在c语言中意义与用法,fun的用法
  17. github上关于iOS的各种开源项目集合 (转载)
  18. ssm + redis
  19. 如何把一个网页设置快捷方式放到桌面上去,或者手机桌面当App一样使用
  20. 【spss统计分析】#1数据的录入

热门文章

  1. NOSQL 之 Graph Database 之 neo4j
  2. 面对逆境:你是胡萝卜、鸡蛋还是咖啡豆
  3. 穷人最讨人嫌的地方其实不是穷,而是太在意面子
  4. 站长问答:百度突然不收录了怎么办?
  5. IPFS存储一致性难题?IPFS-Cluster帮你解决
  6. 布尔教育mysql入门视频教程_布尔教育燕十八mysql入门视频教程的资源(源码课件)推荐...
  7. 10-199 C2-1修改订单运费
  8. 解决WIN10下应用商店不能用,闪退的情况
  9. 利用Python进行性能测试(上)
  10. IntelliJ IDEA Remote Development 使用体验