XStream可以用来转换对象-XML,或者XML-对象。

官网地址:http://x-stream.github.io

小案例:

实体类

FileVo.java

package cn.pinnsvin.xml.vo;

import java.math.BigInteger;
import java.util.Date;
import java.util.List; public class FileVo { private String owner;
private Date createDate;
private Date lastUpdateDate;
private String authority;
private BigInteger size;
private String title;
private String content;
@Override
public String toString() {
return "FileVo [owner=" + owner + ", createDate=" + createDate + ", lastUpdateDate=" + lastUpdateDate
+ ", authority=" + authority + ", size=" + size + ", title=" + title + ", content=" + content + "]";
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Date getLastUpdateDate() {
return lastUpdateDate;
}
public void setLastUpdateDate(Date lastUpdateDate) {
this.lastUpdateDate = lastUpdateDate;
}
public String getAuthority() {
return authority;
}
public void setAuthority(String authority) {
this.authority = authority;
}
public BigInteger getSize() {
return size;
}
public void setSize(BigInteger size) {
this.size = size;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}

FolderVo.java

package cn.pinnsvin.xml.vo;

import java.math.BigInteger;
import java.util.Date;
import java.util.List; public class FolderVo { private List<FileVo> files;
private List<FolderVo> folders;
private String owner;
private Date createDate;
private Date lastUpdateDate;
private String authority;
private BigInteger allSize;
private BigInteger usedSize;
@Override
public String toString() {
return "FolderVo [files=" + files + ", folders=" + folders + ", owner=" + owner + ", createDate=" + createDate
+ ", lastUpdateDate=" + lastUpdateDate + ", authority=" + authority + ", allSize=" + allSize
+ ", usedSize=" + usedSize + "]";
}
public List<FileVo> getFiles() {
return files;
}
public void setFiles(List<FileVo> files) {
this.files = files;
}
public List<FolderVo> getFolders() {
return folders;
}
public void setFolders(List<FolderVo> folders) {
this.folders = folders;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Date getLastUpdateDate() {
return lastUpdateDate;
}
public void setLastUpdateDate(Date lastUpdateDate) {
this.lastUpdateDate = lastUpdateDate;
}
public String getAuthority() {
return authority;
}
public void setAuthority(String authority) {
this.authority = authority;
}
public BigInteger getAllSize() {
return allSize;
}
public void setAllSize(BigInteger allSize) {
this.allSize = allSize;
}
public BigInteger getUsedSize() {
return usedSize;
}
public void setUsedSize(BigInteger usedSize) {
this.usedSize = usedSize;
}
}

工具类

XStreamUtils.java

package cn.pinnsvin.xml.utils;

import java.io.File;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver; import cn.pinnsvin.xml.vo.FileVo;
import cn.pinnsvin.xml.vo.FolderVo; public class XStreamUtils {
private static XStream xStream;
static{
init();
}
public static void init(){
xStream = new XStream(new DomDriver());
xStream.registerConverter(new cn.pinnsvin.xml.utils.DateConverter("yyyyMMdd"));
myAlias();
}
public static void myAlias(){
xStream.alias("Folder", FolderVo.class);
xStream.alias("File", FileVo.class);
}
public static String objectToXML(Object object){
String xml = xStream.toXML(object);
return xml;
}
public static Object xmlToObject(String xml){
Object obj = xStream.fromXML(xml);
return obj;
}
public static Object xmlToObject(File file){
Object obj = xStream.fromXML(file);
return obj;
}
}

日期格式转换类

DateConverter.java

package cn.pinnsvin.xml.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
public class DateConverter implements Converter{
private String format;
public DateConverter(String format) {
super();
this.format = format;
} @Override
public boolean canConvert(Class clazz) {
return java.util.Date.class.isAssignableFrom(clazz);
} @Override
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
java.util.Date date = (Date) source;
DateFormat formatter = new SimpleDateFormat(format);
writer.setValue(formatter.format(date));
} @Override
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
java.util.Date date = new Date();
DateFormat formatter = new SimpleDateFormat(format);
try {
date = formatter.parse(reader.getValue());
} catch (ParseException e) {
throw new ConversionException(e.getMessage(), e);
}
return date;
}
}

调用

package cn.pinnsvin;

import java.io.File;
import java.util.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List; import cn.pinnsvin.xml.utils.XStreamUtils;
import cn.pinnsvin.xml.vo.FileVo;
import cn.pinnsvin.xml.vo.FolderVo;
import cn.pinnsvin.xml.vo.MyDate; public class Main { public static void main(String[] args) throws ParseException {
getS();
} public static void getS() throws ParseException{
FolderVo folder = new FolderVo();
FileVo file = new FileVo();
FileVo file1 = new FileVo();
List<FileVo> files = new ArrayList();
file.setAuthority("读写");
file.setContent("XStream可以用来转换对象-XML,或者XML-对象。");
file.setTitle("xml解析");
file.setCreateDate(new SimpleDateFormat("yyyyMMdd").parse("20161125"));
file1.setAuthority("读");
file1.setContent("XStream可以用来转换对象-XML,或者XML-对象。");
file1.setTitle("xml解析之XStream");
files.add(file);
files.add(file1);
folder.setFiles(files);
folder.setAuthority("读写");
folder.setOwner("Pinnsvin");
folder.setCreateDate(new Date()); XStreamUtils streamUtils = new XStreamUtils();
System.out.println(streamUtils.objectToXML(folder));
FolderVo fd = (FolderVo)streamUtils.xmlToObject(new File("D:\\2.xml"));
System.out.println(fd.toString());
List<FileVo> fl = fd.getFiles();
// System.out.println(fl.toString());
}
}

输出

<Folder>
<files>
<File>
<createDate>20161125</createDate>
<authority>读写</authority>
<title>xml解析</title>
<content>XStream可以用来转换对象-XML,或者XML-对象。</content>
</File>
<File>
<authority>读</authority>
<title>xml解析之XStream</title>
<content>XStream可以用来转换对象-XML,或者XML-对象。</content>
</File>
</files>
<owner>Pinnsvin</owner>
<createDate>20171028</createDate>
<authority>读写</authority>
</Folder>
FolderVo [files=[FileVo [owner=null, createDate=Fri Nov 25 00:00:00 GMT+08:00 2016, lastUpdateDate=null, authority=读写, size=null, title=xml解析, content=XStream可以用来转换对象-XML,或者XML-对象。], FileVo [owner=null, createDate=null, lastUpdateDate=null, authority=读, size=null, title=xml解析之XStream, content=XStream可以用来转换对象-XML,或者XML-对象。]], folders=null, owner=Pinnsvin, createDate=Sat Oct 28 00:00:00 GMT+08:00 2017, lastUpdateDate=null, authority=读写, allSize=null, usedSize=null]

【XML】xStream浅录的更多相关文章

  1. 打造完美的xml技术解决方案(dom4j/xstream)

    转: XML 技术是随着 Java 的发展而发展起来的.在 XML 出现之前对于简单的数据格式通常是存储在 ini 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专 ...

  2. RCE via XStream object deserialization && SECURITY-247 / CVE-2016-0792 XML reconstruction Object Code Inject

    catalogue . Java xStream . DynamicProxyConverter . java.beans.EventHandler . RCE via XStream object ...

  3. (转载)XML解析之-XStream解析

    转载来源:http://hwy584624785.iteye.com/blog/1168680 本例使用XStream生成一个xml文件,再发序列化xml文件内容. XStream是一个简单的类库,可 ...

  4. android XMl 解析神奇xstream 三: 把复杂对象转换成 xml

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  5. android XMl 解析神奇xstream 二: 把对象转换成xml

    前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...

  6. android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件

    简介 XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换. 将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件. 1.下载工具 xstr ...

  7. XStream 快速转换xml

    项目地址:http://xstream.codehaus.org/tutorial.html (以下来源于官网) 1.Create classes to be serialized(初始化类) pub ...

  8. 使用XStream是实现XML与Java对象的转换(6)--持久化

    九.持久化 在第八节的示例中,当我们操作一组对象时,我们可以指定Writer.OutputStream来写出序列化后的XML数据,我们还可以指定Reader.InputStream来读取序列化后的XM ...

  9. 使用XStream是实现XML与Java对象的转换(4)--转换器

    七.转换器(Converter) 我们程序中的POJO是千变万化的,而且需求也是千奇百怪的,所以XStream中的内置的转换器的功能不一定能够满足我们的要求,所以我们就需要自己构建转换器. 1,一个基 ...

随机推荐

  1. oracle查询用户权限及角色(摘)

    1.查看所有用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角色系统权限( ...

  2. Minutes和TotalMinutes的区别

    今天测试提了一个BUG,说是消息提醒的时机不对,设置的提前2小时,还没到就提醒了. 看了下代码 (m.ExpectReceiveTime - DateTime.Now).Minutes < (p ...

  3. Java虚拟机-运行时数据区域

    Java虚拟机管理的内存包括如图所示的运行时数据区域: 下面分别进行介绍: 1)程序计数器(Program Counter Register) 占用的内存空间比较小,主要作用就是标识当前线程执行的字节 ...

  4. 使用jvisualvm远程监控Java程序

    使用Java自带的jvisualvm调试Java程序,可以查看CPU.内存.线程等信息,还可以进行Dump,无疑是一个利器 由于客户端是Windows.服务端是Linux,并且是最小安装的Linux, ...

  5. 从头编写 asp.net core 2.0 web api 基础框架 (1)

    工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相 ...

  6. Centos7虚拟机桥接模式

    主机ping不通虚拟机centos7系统的ip大多有以下原因: 1.主机与centos7ip段对应 (关键是网关.dns服务器要一一对应,具体操作见后文) 2.对应后仍然不通的,可关闭主机与cenos ...

  7. 入门VMware Workstation下的Debian学习之基本命令(二)

    本章记录如何在Linux终端进行命令操作命令下载路径,模拟终端.dkpg管理软件包.用户组和用户管理.文件属性.文件与目录管理.查看磁盘使用量. (1)命令下载路径: wegt 路径; (2)模拟终端 ...

  8. python识别验证码——一般的数字加字母验证码识别

    1.验证码的识别是有针对性的,不同的系统.应用的验证码区别有大有小,只要处理好图片,利用好pytesseract,一般的验证码都可以识别 2.我在识别验证码的路上走了很多弯路,重点应该放在怎么把图片处 ...

  9. Promise 对象

    Promise 对象用于处理异步请求,保存一个异步操作最终完成(或失败)的结果 语法 new Promise( /* executor */ function(resolve, reject) {.. ...

  10. Spring事务管理配置示例

    (一).Spring事务特性 1.事务隔离级别 隔离级别是指若干个并发的事务之间的隔离程度. ISOLATION_DEFAULT:默认值,使用数据库的默认隔离级别,就是ISOLATION_READ_C ...