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. 使用apache反向代理tomacat

    起源 在大部分的生产环境中,基本上使用的都是java程序,从而促进了各种应用程序中间件的产生,在这里大概有几种,tomcat作为最著名的开源servlet容器,jboss也是开源的,而且有管理界面,主 ...

  2. 多线程进阶---Thread.join()/CountDownLatch.await() /CyclicBarrier.await()

    Thread.join() CountDownLatch.await() CyclicBarrier.await() 三者都是用来控制程序的"流动" 可以让程序"堵塞&q ...

  3. extract-text-webpack-plugin打包css后出现图片引用路径不对问题

    在做项目过程中,发现引用了图片的less文件被extract-text-webpack-plugin打包过之后,里面的图片引用路径指向到了extract-text-webpack-plugin打包目录 ...

  4. asp.net core合并压缩资源文件引发的学习之旅

    0. 在asp.net core中使用BuildBundlerMinifier合并压缩资源文件 在asp.net mvc中可以使用Bundle来压缩合并css,js 不知道的见:http://www. ...

  5. Even Parity uva11464 模拟

    Even Parity Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Submit]   ...

  6. hdu4704 Sum 2013 Multi-University Training Contest 10 数论题

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Subm ...

  7. S2_OOP第三章

    第一章 多态 概念 多态是具有表现多种型生态的能力的特征,同一个实现接口,使用不同的实例而执行不同的操作 子类转换父类(向上转型) 用父类接受子类,向上转型 向上转型的规则: 讲一个父类的引用志向一个 ...

  8. windows 2008 R2 断电重启进入修复模式

    windows 2008 R2 意外断电重启进入修复模式 现在出现一个问题,就是当机房停电的时候,计算机自动进入到修复模式,当人不在机房的时候,容易造成服务器无法访问,我相信正常启动应该没什么问题吧, ...

  9. jQuery和js获取select元素的选中项value?

    1.jQuery方式获取:$("#test").val(); 2.js方式获取:document.getElementById("test").value;

  10. KM算法新识

    看了很多写的好的文章,但是针对代码注释来讲,这篇文章最合适.                                 如果人生会有很长,愿你的荣耀永不散场--wenr大牛. #include ...