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简易实战教程--第四十九话《满屏拖动的控件》
今天做个有意思的效果吧,控件的拖拽,简单实用,逻辑清晰点3分钟看完. 说的很高大上,其实就是拖动Button按钮跟着鼠标位置满手机屏幕跑罢了. 直接上简单的代码吧: public class Main ...
- 判断&数学&生活
作者:黄永刚 初次接触<概率论与数理统计>这门课的时候,脑袋中只有三个词:黑球.白球.袋子,所有的课程内容就是先取,后取,接触一月之后成功的被放趴下了,因此对于这门课程是没有什么好感的,考 ...
- 说一说关于破解支付宝AR红包的事
当朋友圈的你们才开始分享支付宝AR红包的消息的时候,我已经对它动了一二三四次歪脑筋了,虽然事实证明并不是那么顺利,至今我也只在电脑前识别出5个不知道在哪里的红包,其中一个还因为定位信息不符开不了. 昨 ...
- JAVA面向对象-----匿名内部类
匿名内部类 匿名内部类:就是没有类名字的内部类. 匿名内部类作用:简化内部类书写. 匿名内部类的前提:必须继承一个父类或者是实现一个接口. 匿名内部类的格式: new 父类或者接口(){ 执行代码-. ...
- RxJava(一) create操作符的用法和源码分析
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/51524470 本文出自:[余志强的博客] 1 create操作符的基 ...
- Gazebo機器人仿真學習探索筆記(四)模型編輯
模型編輯主要是自定義編輯物體模型構建環境,也可以將多種模型組合爲新模型等,支持外部模型導入, 需要注意的導入模型格式有相應要求,否在無法導入成功, COLLADA (dae), STereoLitho ...
- Struts 1 之<bean>标签库
<bean:write>标签 <bean:write>能输出request.session.application.page四个域中能访问到的变量,与EL表达式不同的是,如果变 ...
- Spring开发环境搭建教程
Spring开发环境搭建 JDK7以上版本 eclispe for j2ee 4.0以上版本 Spring frameWorks 3.0以上版本 至于前两个我们就不介绍,直接百度就可以了,对于Spri ...
- MySQL 存储过程探秘
关于存储过程的优点,本文不再阐述.这里只是对创建存储过程时可能遇到的问题做一下简单的分析. 必备基础 这里说的基础,是相关于如何创建一个存储过程的. DELIMITER:分隔符,定界符. 作用就是:作 ...
- 修改Chrome默认的搜索引擎
Chrome浏览器可谓是现在世界上最受欢迎的一款浏览器了,不仅仅是在其简单易用还有优雅的界面,还有与一众以人为本的设计理念,在我的眼里,匠心独具.但是咧,由于在国内谷歌是被禁止访问的,所以Chrome ...