XML 处理利器 : XStream
来源:互联网 发布:iphone好玩的软件 编辑:程序博客网 时间:2024/04/29 15:21
XStream 概述
XStream 是一套简洁易用的开发类库,用于将Java对象序列化为XML或者将XML反序列化为JAVA对象,是JAVA对象和XML之间一个双向转换器。
举例
采用User用户对象和LoginLog登录日志对象作为XStream实例转换对象. 例子简单,直接贴代码了.
User.java
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;}}
LoginLog.java
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 {@Testpublic 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());}@Testpublic 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 别名
在默认情况下,Java对象映射到XML的映射,是Java对象属性名对应XML的元素名,Java类的全名对应XML根元素的名字。在实际的应用中,如果XML和Java类都已经存在相应的名字,在进行转换时,需要设置别名进行映射。
XStream别名配置包含三种情况:
类别名,用alias(String name ,Class type);
类成员别名,用aliasField(String alias,Class definedIn,String fieldName);yo
类成员作为属性别名,用aliasAttribute(Class definedIn,String attributeName,String alias) ,单独命名没有意义,还要通过useAttributeFor(Class definedIn,String fieldName) 应用到某个类上。
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; }}
0 0
- XML 处理利器 : XStream
- XML处理利器:XStream
- XStream 注解处理xml
- android 中XML和对象转换利器Xstream的使用
- JAVA bean与XML互转的利器---XStream
- Xstream XML文件互转JAVA对象的利器
- android 中XML和对象转换利器Xstream的使用
- android 中XML和对象转换利器Xstream的使用
- android 中XML和对象转换利器Xstream的使用
- android 中XML和对象转换利器Xstream的使用
- android 中XML和对象转换利器Xstream的使用
- android 中XML和对象转换利器Xstream的使用
- JAVA bean与XML互转的利器---XStream
- JAVA bean与XML互转的利器---XStream
- JAVA bean与XML互转的利器---XStream
- JAVA bean与XML互转的利器---XStream
- Xml字符串和Java对象转换利器——XStream
- android 中XML和对象转换利器Xstream的使用
- 借助Ehcache缓存框架实现对页面的缓存
- Filed 类的使用方法以及java反射机制的案例
- 进程间通信--两个进程操作同一个文件
- android 开发总结一
- BZOJ 1036 [ZJOI2008]树的统计Count (树链剖分裸题)
- XML 处理利器 : XStream
- 分解和组合的抽象方法
- java解压缩工具类
- C文件操作
- ubuntu14.04上安装tigervnc
- Linux关机命令
- 三角形问题II
- Trie
- android播放器怎么调用硬解