XML 处理利器 : XStream
XStream 概述
举例
package com.baobaotao.domain; import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map; public class User implements Serializable {
private int userId;
private String userName;
private String password;
private int credits;
private String lastIp;
private Date lastVisit;
private List logs;
private Map datas; public List<LoginLog> getLogs() {
return logs;
}
public void setLogs(List logs) {
this.logs = logs;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getCredits() {
return credits;
}
public void setCredits(int credits) {
this.credits = credits;
}
public String getLastIp() {
return lastIp;
}
public void setLastIp(String lastIp) {
this.lastIp = lastIp;
}
public Date getLastVisit() {
return lastVisit;
}
public void setLastVisit(Date lastVisit) {
this.lastVisit = lastVisit;
} public void addLoginLog(LoginLog log){
if(this.logs==null){
logs = new ArrayList<LoginLog>();
}
logs.add(log);
} public Map getDatas() {
return datas; }
public void setDatas(Map datas) {
this.datas = datas;
} }
package com.baobaotao.domain; import java.io.Serializable;
import java.util.Date; public class LoginLog implements Serializable {
private int loginLogId;
private int userId;
private String ip;
private Date loginDate; public int getLoginLogId() {
return loginLogId;
}
public void setLoginLogId(int loginLogId) {
this.loginLogId = loginLogId;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public Date getLoginDate() {
return loginDate;
}
public void setLoginDate(Date loginDate) {
this.loginDate = loginDate;
} }
下面就开始使用XStream进行对象与 XML之间的转换.
package com.baobaotao.oxm.xtream; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Date; import com.baobaotao.domain.LoginLog;
import com.baobaotao.domain.User;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver; public class XStreamSample { private static XStream xstream;
static{
//创建XStream实例并指定一个XML 解析器
xstream=new XStream(new DomDriver());
} //初始化转换对象
public static User getUser(){
LoginLog log1=new LoginLog();
log1.setIp("192.168.1.91");
log1.setLoginDate(new Date()); User user=new User();
user.setUserId(1);
user.setUserName("xstream");
user.addLoginLog(log1); return user;
} //Java 对象转换成XML
public static void objectToXML() throws Exception{ //获取转换User对象的实例
User user=getUser();
//实例化一个文件输出流
FileOutputStream fileOutputStream=new FileOutputStream("XStreamSample.xml"); //将User对象转换为XML,并保存到指定文件
xstream.toXML(user,fileOutputStream);
} //XML转换为Java对象
public static User XMLToObject() throws Exception{
//实例化一个文件输入流
FileInputStream inputStream=new FileInputStream("XStreamSample.xml");
//将XML文件输入流转化为对象
User user=(User) xstream.fromXML(inputStream); for(LoginLog log :user.getLogs()){
if(log!=null){
System.out.println("访问IP:"+log.getIp());
}
}
} }
编写测试类
package com.baobaotao.oxm.xstream; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import java.io.BufferedReader;
import java.io.FileReader; import org.junit.Test; import com.baobaotao.domain.LoginLog;
import com.baobaotao.domain.User;
import com.baobaotao.oxm.xtream.XStreamSample; public class TestXStreamSample { @Test
public void objectToXml()throws Exception {
XStreamSample.objectToXML();
FileReader reader = new FileReader("XStreamSample.xml");
BufferedReader br = new BufferedReader(reader);
StringBuffer sb = new StringBuffer("");
String s;
while ((s = br.readLine()) != null) {
sb.append(s);
}
System.out.println(sb.toString());
reader.close();
br.close();
// assertXpathExists("//com.baobaotao.domain.User",sb.toString());
// assertXpathExists("//credits",sb.toString());
// assertXpathExists("//userName",sb.toString());
// assertXpathExists("//com.baobaotao.domain.LoginLog",sb.toString());
} @Test
public void xmlToObject()throws Exception {
XStreamSample.objectToXML();
User u = XStreamSample.XMLToObject();
assertNotNull(u);
assertEquals("xstream", u.getUserName());
for (LoginLog log : u.getLogs()) {
assertNotNull(log);
assertNotNull(log.getIp());
assertNotNull(log.getLoginDate());
} }
}
生成的XML文件如下:
<com.baobaotao.domain.User>
<userId>1</userId>
<userName>xstream</userName>
<credits>0</credits>
<logs>
<com.baobaotao.domain.LoginLog>
<loginLogId>0</loginLogId>
<userId>0</userId>
<ip>192.168.1.91</ip>
<loginDate>2015-03-25 07:44:05.783 UTC</loginDate>
</com.baobaotao.domain.LoginLog>
</logs>
</com.baobaotao.domain.User>
使用XStream 别名
package com.baobaotao.oxm.xtream.alias; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Date; import com.baobaotao.domain.LoginLog;
import com.baobaotao.domain.User;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver; /**
* 别名
* @author yulei
*/
public class XStreamAliasSample {
private static XStream xstream;
static {
xstream=new XStream(new DomDriver());
//设置类别名,默认为当前类名称加上包名
xstream.alias("loginLog", LoginLog.class);
xstream.alias("user", User.class); //设置类成员别名
xstream.aliasField("id", User.class, "userId");
//把LoginLog的userId属性视为XML属性,默认为XML的元素
xstream.aliasAttribute(LoginLog.class, "userId","id");
xstream.useAttributeFor(LoginLog.class, "userId"); //去掉集合类型生成XML的父节点,即忽略XML中的<logs></logs>标记
xstream.addImplicitCollection(User.class,"logs"); } //初始化转换对象
public static User getUser(){
LoginLog log1=new LoginLog();
log1.setIp("192.168.1.91");
log1.setLoginDate(new Date()); User user=new User();
user.setUserId(1);
user.setUserName("xstream");
user.addLoginLog(log1); return user;
} //Java 对象转换成XML
public static void objectToXML() throws Exception{ //获取转换User对象的实例
User user=getUser();
//实例化一个文件输出流
FileOutputStream fileOutputStream=new FileOutputStream("XStreamSample.xml"); //将User对象转换为XML,并保存到指定文件
xstream.toXML(user,fileOutputStream);
} //XML转换为Java对象
public static User XMLToObject() throws Exception{
//实例化一个文件输入流
FileInputStream inputStream=new FileInputStream("XStreamSample.xml");
//将XML文件输入流转化为对象
User user=(User) xstream.fromXML(inputStream); for(LoginLog log :user.getLogs()){
if(log!=null){
System.out.println("访问IP:"+log.getIp());
}
}
return user;
} }
XML 处理利器 : XStream的更多相关文章
- android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 三: 把复杂对象转换成 xml
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 二: 把对象转换成xml
前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...
- android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件
简介 XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换. 将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件. 1.下载工具 xstr ...
- JAVA Bean和XML之间的相互转换 - XStream简单入门
JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...
- 微信开发,对象转换为xml时候引用XStream这个类报错处理方案
报错的信息为:The type org.xmlpull.v1.XmlPullParser cannot be resolved. /** * 扩展XStream 支持CDATA */ privat ...
- JAVA bean与XML互转的利器---XStream
最近在项目中遇到了JAVA bean 和XML互转的需求, 本来准备循规蹈矩使用dom4j忽然想起来之前曾接触过的XStream, 一番研究豁然开朗,利器啊利器, 下来就XStream的一些用法与大家 ...
随机推荐
- TensorFlow实验环境搭建
初衷: 由于系统.平台的原因,网上有各种版本的tensorflow安装教程,基于linux的.mac的.windows的,各有不同,tensorflow的官网也给出了具体的安装命令.但实际上,即使te ...
- 《Shazam It! Music Recognition Algorithms, Fingerprinting, and Processing》译文
最近看到一篇老外写的博客,简单介绍了shazam的工作原理.图非常好,所以就把它翻译成中文,希望对搞听歌识曲的人有帮助. 你可能遇到这样的场景:在酒吧或者餐厅听到你非常熟悉的歌,也许你曾经听过无数次, ...
- ORACLE时间日期格式使用总结(参考网上资料汇总)
Oracle时间日期操作 sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdate+5/24 在系统时间基础上延迟 ...
- Java程序员必须掌握的线程知识-Callable和Future
Callable和Future出现的原因 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需 ...
- Apache Beam—透视Google统一流式计算的野心
Google是最早实践大数据的公司,目前大数据繁荣的生态很大一部分都要归功于Google最早的几篇论文,这几篇论文早就了以Hadoop为开端的整个开源大数据生态,但是很可惜的是Google内部的这些系 ...
- EBS库存(INV)模块常用表
select * from org_organization_definitions库存组织 select * from mtl_parameters组织参数 select * from mtl ...
- introduction of velocity
一.velocity 简介 基于java 的模板引擎,apache 旗下的开源软件项目. 目的在于隔离 表示层和业务逻辑层,当然现在做的不仅仅是这些. 二.应用场景 web 应用程序:创建html页面 ...
- Android源码分析—深入认识AsyncTask内部机制
本文转载http://blog.csdn.net/singwhatiwanna/article/details/17596225该博主博文,谢谢该博主提供的好文章! 前言 什么是AsyncTask,相 ...
- linux下字节对齐
一,内存地址对齐的概念 计算机内存中排列.访问数据的一种方式,包含基本数据对齐和结构体数据对齐. 32位系统中,数据总线宽度为32,每次能够读取4字节数据.地址总线为32,最大寻址空间为4 ...
- 02_MyBatis项目结构,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置
项目结构(所需jar包,配置文件) sqlMapConfig.xml的配置内容如下: <?xmlversion="1.0"encoding="UTF-8&qu ...