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的一些用法与大家 ...
随机推荐
- Android RRO机制的运用-----google开机向导客制化
上周五的时候领导分了一个任务,客户让在google开机向导里面增加一页,首先就想到了android的Overlay,然后网上搜了下,发下有很多人写了这方面的技术.而且写的都还不错,所以本篇只当记录作用 ...
- 粗糙的es6 -> es5转换正则集
(r'() => {}','function () {return {}}'), # (r'\{\.\.\.(.+?)\}','Object.assign({}, \\1)') , # (r'( ...
- Zookeeper动态更新服务器列表
-------------------------------------------------------------------------------------- [版权申明:本文系作者原创 ...
- Hive的HQL语句及数据倾斜解决方案
[版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/51675005 作者: 朱培 ID ...
- Swift类中如何创建一个对外只读对内可读写的属性
很简单用private修饰符,后面跟限制关键字set: class Day{ private(set) var rawValue:Int = 0 func showRawValue(){ print( ...
- Android 多窗口详解
多窗口支持 Android N 添加了对同时显示多个应用窗口的支持. 在手持设备上,两个应用可以在"分屏"模式中左右并排或上下并排显示. 在电视设备上,应用可以使用"画中 ...
- springMVC源码分析--ControllerClassNameHandlerMapping(九)
在上一篇博客springMVC源码分析--AbstractControllerUrlHandlerMapping(六)中我们介绍到AbstractControllerUrlHandlerMapping ...
- Java程序员必须掌握的线程知识-Callable和Future
Callable和Future出现的原因 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需 ...
- (一一三)使用系统自带框架操作SQLite3数据库
系统自带的框架是基于C语言的,使用比较繁琐. 下面是使用步骤: 首先导入libsqlite3.0.dylib. ①在Document目录下打开数据库,如果没有则创建. NSString *sqlite ...
- 浅谈C语言 extern 指针与数组
/* * d.c * * Created on: Nov 15, 2011 * Author: root */ #include "apue.h" int a[] = {3,2}; ...