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的一些用法与大家 ...
随机推荐
- Java第10次实验(数据库)
参考资料 数据结构实验参考文件 MySql操作视频与数据库相关jar文件请参考QQ群文件. 第1次实验 1. MySQL数据库基本操作 完整演示一遍登录.打开数据库.建表.插入 常见错误:语句后未跟; ...
- 剑指Offer——知识点储备-Java基础
剑指Offer--知识点储备-Java基础 网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&pa ...
- PHP+MySQL 分页那点事
分页技术随处可见,这可以算得上是最为基础的网站功能了.于是今天尝试着用PHP来实现一个分页的小例子. 准备工作 环境准备 Apache MySQL PHP 工作环境 数据库准备 建库 建表 预存数据 ...
- MyEclipse如何全局搜索
1全局搜索的启动方式 CTRL+H 2全局搜索自己选择搜索方式 自己选择要搜索的东西,简单吧,里面还有很多好玩的东西需要你去发现,加油! [正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之 ...
- 计算机网络中的TCP/IP模型
Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议.Inter ...
- [django]用fastcgi部署
django官方已经开始弃用fastcgi来部署django应用了,作为以前使用过的用户,还是贴一个配置,用来做纪念吧.. 项目下 #! /bin/sh case "$@" in ...
- Android Multimedia框架总结(十二)CodeC部分之OMXCodec与OMX事件回调流程
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52629449 前言:上篇文中分析 ...
- JQuery 网页选项卡制作
网页选项卡可以较好的利用有限的页面来展示更多的元素,而使用JQuery来制作网页选项卡也是一件非常简单的事情.今天就来分享一个网页选项卡的制作小技巧. 引入所需库 选项卡原理 业务核心 完整小例子 引 ...
- shell test和find命令实例解析
shell test和find命令实例解析 下面以\build\core\product.mk相关部分来学习 define _find-android-products-files $(shell t ...
- Dynamics CRM Trace Reader for Microsoft Dynamics CRM
CRM中抓取日志的视窗工作叫做Diagnastics Tools For Dyanmics CRM,这个工具我们只是作为一个开关来用就不做多介绍了,日志生成后是个文本文档可读性是很差的,那就需要个视窗 ...