XStream的简单使用
XStream
XStream是一个java对象和xml相互转换的工具
- 创建XStream对象:XStream stream = new XStream()
- Java对象转换成xml:stream .toXML(...)
- xml转换成Java对象:stream .fromXML(...)
转换装配方式
- DomDriver方式:new XStream(new DomDriver());
- StaxDriver方式:new XStream(new StaxDriver());
- XppDriver,默认方式,但是xpp方式经常解析xml会出错
Java转XML
1.导入jar
- xmlpull_1_0_5.jar
- xpp3_min-1.1.4c.jar
- 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的简单使用的更多相关文章
- XStream使用详解
1.Xstream介绍 (1)Xstream介绍 Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需 ...
- java框架---->Xstream的使用(一)
Xstream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称.今天我们就简单的学习一下xstream的用法. Xstream的简单实例 项目的结构如下,设计到三个类 ...
- 最受欢迎的Java第三方库
前言 翻译自programcreek: 典型的Java项目通常会依赖一些第三方库,本文总结了一些最受欢迎的Java库,这些类库在各种应用程序中被广泛使用: 当然,Java SDK是最广泛使用的Java ...
- XStream简单入门
简单的讲,XStream 涉及的就五个知识点:详情参考 官网 混叠,注解,转换器,对象流和操作json! 下面就用几个简单的例子来实现上述五个知识点! 基本步骤: 第1步:创建XStream对象. 通 ...
- JAVA Bean和XML之间的相互转换 - XStream简单入门
JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...
- XStream简单使用01——xml和Ojbect互转
package org.zhb.test; /** * author : zhb * data : 2014-2-14 * use packages: * xmlpull-1.1.3.1.jar * ...
- XStream的使用方法、简单使用方法、xml的解析方法
下面介绍的是在Android Studio中的使用 Android Studio中目前支持的Xstream最高版本是xstream-1.4.7.jar,大家可以在网上下载,我的是在开源中国项目中有这个 ...
- 简单使用XStream
Stream1.什么作用 *可以把JavaBean转换为(序列化为)xml2.XStream的jar *核心jar:xstream-1.4.7.jar *必须依赖包:xpp3_min-1.1.4c(X ...
- 打造完美的xml技术解决方案(dom4j/xstream)
转: XML 技术是随着 Java 的发展而发展起来的.在 XML 出现之前对于简单的数据格式通常是存储在 ini 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专 ...
随机推荐
- UVA 10256 The Great Divide(凸包划分)
The Great Divide Input: standard input Output: standard output Time Limit: 8 seconds Memory Limit: 3 ...
- 【记录】linux docker 安装 tomcat
前言:首先linux需要先安装docker,具体步骤可以参考博主之前博客,也可自行百度. 话不多说,开始安装tomcat: 通过docker安装tomcat docker pull tomcat:8. ...
- 三、bootstrap-treeview
一.bootstrap-treeview 修饰标签为徽章 参考 https://www.cnblogs.com/bin521/p/8403588.html
- 2019牛客暑期多校训练营(第六场)C E H G
C Palindrome Mouse E Androgynos 参考https://blog.csdn.net/birdmanqin/article/details/98479219这位大佬的.构造题 ...
- 解读dbcp自动重连那些事(转)
转自:http://agapple.iteye.com/blog/791943 Hi all : 最近在做 offerdetail 优化时,替换了数据库驱动,从 c3p0 0.9.1 -> db ...
- VUE前端面试题
什么是 mvvm? MVVM 是 Model-View-ViewModel 的缩写.mvvm 是一种设计思想.Model 层代表数据模型,也可以在 Model 中定义数据修改和操作的业务逻辑:View ...
- 使用KEIL C51实现的简单合作式多任务操作系统内核(单片机实现版本)
基于网上网友的代码,自己在单片机上实现, 特此记录分享之. 基于https://blog.csdn.net/yyx112358/article/details/78877523 //使用KEIL C5 ...
- Application对象详解
定义// import javax.servlet.ServletContext;// ServletContext类:用于表示应用程序的上下文// 取得application对象ServletCon ...
- Quartz.Net 任务调度之传递参数(2)
1.jobDetail //添加 //Key:Value jobDetail.JobDataMap.Add("张翼德", "张翼德"); jobDetail.J ...
- FTP上传脚本
脚本名称:uploadToFtp.sh 脚本用途:上传文件到FTP服务器 脚本参数:$1:FTP服务器的路径,$2:本地文件 #!/bin/bash FTP_USER="testfile&q ...