【XML】xStream浅录
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浅录的更多相关文章
- 打造完美的xml技术解决方案(dom4j/xstream)
转: XML 技术是随着 Java 的发展而发展起来的.在 XML 出现之前对于简单的数据格式通常是存储在 ini 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专 ...
- 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 ...
- (转载)XML解析之-XStream解析
转载来源:http://hwy584624785.iteye.com/blog/1168680 本例使用XStream生成一个xml文件,再发序列化xml文件内容. XStream是一个简单的类库,可 ...
- 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 ...
- XStream 快速转换xml
项目地址:http://xstream.codehaus.org/tutorial.html (以下来源于官网) 1.Create classes to be serialized(初始化类) pub ...
- 使用XStream是实现XML与Java对象的转换(6)--持久化
九.持久化 在第八节的示例中,当我们操作一组对象时,我们可以指定Writer.OutputStream来写出序列化后的XML数据,我们还可以指定Reader.InputStream来读取序列化后的XM ...
- 使用XStream是实现XML与Java对象的转换(4)--转换器
七.转换器(Converter) 我们程序中的POJO是千变万化的,而且需求也是千奇百怪的,所以XStream中的内置的转换器的功能不一定能够满足我们的要求,所以我们就需要自己构建转换器. 1,一个基 ...
随机推荐
- 懒人小工具:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法
之前写了篇文章,懒人小工具:[自动生成Model,Insert,Select,Delete以及导出Excel的方法](http://www.jianshu.com/p/d5b11589174a),但是 ...
- 【Python学习笔记之二】浅谈Python的yield用法
在上篇[Python学习笔记之一]Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生 ...
- hdu 4090--GemAnd Prince(搜索)
题目链接 Problem Description Nowadays princess Claire wants one more guard and posts the ads throughout ...
- 01背包java实现(入门到精通)
一.什么是01背包 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2至Wn,与之相对应的价值为P1,P2至Pn.01背包是背包问题中最简单的问题.01背包的约束条件是给定 ...
- hdu2157矩阵快速幂
How many ways?? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu3507 Print Article(斜率DP优化)
Zero has an old printer that doesn't work well sometimes. As it is antique, he still like to use it ...
- 支持向量机SVM(二)
[转载请注明出处]http://www.cnblogs.com/jerrylead 6 拉格朗日对偶(Lagrange duality) 先抛开上面的二次规划问题,先来看看存在等式约束的极值问题求法, ...
- 移动HTNL5前端框架—MUI
前 言 JRedu 鉴于之前的很多前端框架(特别是响应式布局的框架),UI控件看起来太像网页,没有原生感觉,因此追求原生UI也是MUI的重要目标.MUI以iOS平台UI为基础,补充部分Andro ...
- NOIP 11.01 应试记录
快排代码 void quicksort(int left,int right) { int u,j,t,temp; if(letf>right) return; temp=a[left]; i= ...
- jquery系列教程1-选择器全解
全栈工程师开发手册 (作者:栾鹏) 快捷链接: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件 ...