XStream

XStream是一个java对象和xml相互转换的工具

  1. 创建XStream对象:XStream stream = new XStream()
  2. Java对象转换成xml:stream .toXML(...)
  3. xml转换成Java对象:stream .fromXML(...)

转换装配方式

  1. DomDriver方式:new XStream(new DomDriver());
  2. StaxDriver方式:new XStream(new StaxDriver());
  3. XppDriver,默认方式,但是xpp方式经常解析xml会出错

Java转XML

1.导入jar

  1. xmlpull_1_0_5.jar
  2. xpp3_min-1.1.4c.jar
  3. xstream-1.4.4.jar

2.测试类

 public class TestC {
/**
* 控制台:
* xml:
* <list>
* <city id="1">
* <pid>1</pid>
* <cname>合肥</cname>
* </city>
* <city id="2">
* <pid>1</pid>
* <cname>芜湖</cname>
* </city>
* <city id="3">
* <pid>1</pid>
* <cname>蚌埠</cname>
* </city>
* <city id="4">
* <pid>1</pid>
* <cname>淮北</cname>
* </city>
* </list>
*/
@Test
public void test1() {//java--->xml
List<City> list = new ArrayList<>();
list.add(new City(1,1,"合肥"));
list.add(new City(2,1,"芜湖"));
list.add(new City(3,1,"蚌埠"));
list.add(new City(4,1,"淮北")); XStream stream = new XStream(new DomDriver());//DomDriver装配方式 //设置id为City.class标签的属性<com.qf.pojo.City id="">
stream.useAttributeFor(City.class, "id"); //使用别名city代替City.class <com.qf.pojo.City> ----> <city>
stream.alias("city", City.class); //list转换为xml字符串
String xml = stream.toXML(list); System.out.println("xml:\n"+xml);
} /**
* 控制台:com.thoughtworks.xstream.io.StreamException: Cannot create XmlPullParser
*/
@Test
public void test2() {//xml--->java
List<City> list = new ArrayList<>();
list.add(new City(1,1,"合肥"));
list.add(new City(2,1,"芜湖"));
list.add(new City(3,1,"蚌埠"));
list.add(new City(4,1,"淮北")); //默认装配方式,使用的其实是XppDriver
XStream stream = new XStream();
//会抛出异常:com.thoughtworks.xstream.io.StreamException: Cannot create XmlPullParser
String xml = stream.toXML(list); stream.processAnnotations(List.class);
Object fromXML = stream.fromXML(xml);
List city = List.class.cast(fromXML);
System.out.println("city:\n"+city);
} /**
* 控制台:
* city:
* [City [id=1, pid=1, cname=合肥], City [id=2, pid=1, cname=芜湖], City [id=3, pid=1, cname=蚌埠], City [id=4, pid=1, cname=淮北]]
*/
@Test
public void test3() {//xml--->java
List<City> list = new ArrayList<>();
list.add(new City(1,1,"合肥"));
list.add(new City(2,1,"芜湖"));
list.add(new City(3,1,"蚌埠"));
list.add(new City(4,1,"淮北")); XStream stream = new XStream(new DomDriver());
String xml = stream.toXML(list); stream.processAnnotations(List.class);
Object fromXML = stream.fromXML(xml);
List city = List.class.cast(fromXML);
System.out.println("city:\n"+city);
}
}

xpp装配方式创建XStream对象解析xml经常会出错:com.thoughtworks.xstream.io.StreamException: Cannot create XmlPullParser

Java转JSON

xStream对JSON也有非常好的支持,它提供了2个模型驱动可以完成Java对象到JSON的相互转换

1.使用JettisonMappedXmlDriver驱动,可以将Java对象转换成json,也可以将json转换为Java对象需要添加jettison.jar

 package com.qf.Test;

 import java.util.ArrayList;
import java.util.List; import org.junit.Test; import com.qf.pojo.City;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver; /**
* 测试用JettisonMappedXmlDriver实现与JSON的互相转换
* @author 14505
*
*/
public class TestJson {
/**
* Java--->json
* 控制台输出:
* {"list":[{"com.qf.pojo.City":[{"id":1,"pid":1,"cname":"合肥"},{"id":2,"pid":1,"cname":"芜湖"}]}]}
*/
@Test
public void test1() {
List<City> list = new ArrayList<>();
list.add(new City(1,1,"合肥"));
list.add(new City(2,1,"芜湖")); XStream stream = new XStream(new JettisonMappedXmlDriver()); stream.setMode(XStream.NO_REFERENCES); //list转换为Json字符串
String json = stream.toXML(list); System.out.println(json);
} /**
* json--->Java
* 控制台输出:
* [[City [id=1, pid=1, cname=合肥], City [id=2, pid=1, cname=芜湖]]]
*/
@Test
public void test2() {
List<City> list = new ArrayList<>();
list.add(new City(1,1,"合肥"));
list.add(new City(2,1,"芜湖")); XStream stream = new XStream(new JettisonMappedXmlDriver()); stream.setMode(XStream.NO_REFERENCES); //list转换为Json字符串
String json = stream.toXML(list); Object obj = stream.fromXML(json); System.out.println(obj);
}
}

2.使用JsonHierarchicalStreamDriver驱动,只能将Java对象转换成json

 package com.qf.Test;

 import java.io.Writer;
import java.util.HashMap;
import java.util.Map; import org.junit.Test; import com.qf.pojo.City;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
import com.thoughtworks.xstream.io.json.JsonWriter; /**
* 测试用JsonHierarchicalStreamDriver实现java转换成JSON
* @author 14505
*
*/
public class TestJson {
/**
* Java--->json
* 控制台输出:
* JSON:{"map": [
* [
* "city1",
* {
* "id": 1,
* "pid": 1,
* "cname": "合肥"
* }
* ],
* [
* "city2",
* {
* "id": 2,
* "pid": 1,
* "cname": "芜湖"
* }
* ]
* ]}
*默认会给转换后的对象添加一个根节点,可以通过重写JsonHierarchicalStreamDriver的createWriter方法进行设置删除额外添加的根节点
*/
@Test
public void test1() {
City city1 = new City(1,1,"合肥");
City city2 = new City(2,1,"芜湖");
Map<String, City> map = new HashMap<>();
map.put("city1", city1);
map.put("city2", city2); XStream xStreamJ = new XStream(new JsonHierarchicalStreamDriver()); String json = xStreamJ.toXML(map);
System.out.println("JSON:"+ json);
} /**
* Java--->json
* 控制台输出:
* {"map": [
* [
* "city1",
* {
* "id": 1,
* "pid": 1,
* "cname": "合肥"
* }
* ],
* [
* "city2",
* {
* "id": 2,
* "pid": 1,
* "cname": "芜湖"
* }
* ]
* ]
* }
*/
@Test
public void test2() {
City city1 = new City(1,1,"合肥");
City city2 = new City(2,1,"芜湖");
Map<String, City> map = new HashMap<>();
map.put("city1", city1);
map.put("city2", city2); //默认会给转换后的json添加一个根节点JSON,重写JsonHierarchicalStreamDriver的createWriter方法可以设置删除根节点
XStream xStreamJ = new XStream(new JsonHierarchicalStreamDriver() {
@Override
public HierarchicalStreamWriter createWriter(Writer out) {
return new JsonWriter(out,JsonWriter.DROP_ROOT_MODE);
}
}); String json = xStreamJ.toXML(map);
System.out.println("JSON:"+ json);
}
}

XStream的简单使用的更多相关文章

  1. XStream使用详解

    1.Xstream介绍 (1)Xstream介绍     Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需 ...

  2. java框架---->Xstream的使用(一)

    Xstream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称.今天我们就简单的学习一下xstream的用法. Xstream的简单实例 项目的结构如下,设计到三个类 ...

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

    前言 翻译自programcreek: 典型的Java项目通常会依赖一些第三方库,本文总结了一些最受欢迎的Java库,这些类库在各种应用程序中被广泛使用: 当然,Java SDK是最广泛使用的Java ...

  4. XStream简单入门

    简单的讲,XStream 涉及的就五个知识点:详情参考 官网 混叠,注解,转换器,对象流和操作json! 下面就用几个简单的例子来实现上述五个知识点! 基本步骤: 第1步:创建XStream对象. 通 ...

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

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

  6. XStream简单使用01——xml和Ojbect互转

    package org.zhb.test; /** * author : zhb * data : 2014-2-14 * use packages: * xmlpull-1.1.3.1.jar * ...

  7. XStream的使用方法、简单使用方法、xml的解析方法

    下面介绍的是在Android Studio中的使用 Android Studio中目前支持的Xstream最高版本是xstream-1.4.7.jar,大家可以在网上下载,我的是在开源中国项目中有这个 ...

  8. 简单使用XStream

    Stream1.什么作用 *可以把JavaBean转换为(序列化为)xml2.XStream的jar *核心jar:xstream-1.4.7.jar *必须依赖包:xpp3_min-1.1.4c(X ...

  9. 打造完美的xml技术解决方案(dom4j/xstream)

    转: XML 技术是随着 Java 的发展而发展起来的.在 XML 出现之前对于简单的数据格式通常是存储在 ini 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专 ...

随机推荐

  1. Vue-router路由的简单使用

    一.安装路由: 如果使用vue-cli脚手架搭建,项目创建过程中会提示你自否选择使用vue-router,选择使用即可, 二.创建组件 1.vue-cli项目自动创建的路由文件是src包下面的rout ...

  2. Centos 7 安装openjdk8

    一.使用yum命令搜索支持jdk版本 yum search java|grep jdk 二.使用yum安装jdk8 yum install -y java--openjdk 三.检查是否成功 java ...

  3. PyTorch 计算机视觉的迁移学习教程代码详解 (TRANSFER LEARNING FOR COMPUTER VISION TUTORIAL )

    PyTorch 原文: https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html 参考文章: https://www ...

  4. 最近开发的项目,遇到用户上传excel文件并导入数据到系统这个需求,而有excel中有的单元格是日期格式,本文介绍怎么从excel中读取日期格式的数据。

    可以先判断单元格的类型,有的日期是字符串存储的,有的是按日期存储的(单元格按数字解析),代码如下: Cell cell = row.getCell(); Date date = null; if (c ...

  5. PHP面向对象:instanceof 运算符

    http://www.nowamagic.net/php/php_InstanceofOperator.php 在PHP5中,通过方法传递变量的类型有不确定性.于是我们很难判断,一些操作是否可以运行. ...

  6. POJ 1273 Drainage Ditches (网络流Dinic模板)

    Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...

  7. hdu 4609 3-idiots(FFT+去重处理)

    3-idiots Problem Description King OMeGa catched three men who had been streaking in the street. Look ...

  8. 前端每日实战:73# 视频演示如何用纯 CSS 创作一只卡通狐狸

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OEKZed 可交互视频 此视频是可 ...

  9. 【C#技术】一篇文章搞掂:Infragistics组件库

    工具栏 // 按钮不可按 tool.SharedProps.Enabled = false; Grid // Grid中记录时间 // 建议SQL Server中使用字符字段(没有深入测试,只是字符字 ...

  10. 如何让EditText不能自动获取焦点(转)

    转载地址:http://blog.csdn.net/subaohao/article/details/9043895 在activity中放置了1个或1个以上的EditText,进入该activity ...