学习Xstrean网上资料很少,到处都找不到相关文档,以下文章供大家参考
通过Xstrean的方式可以把xml格式的数据转换成java对象(序列化),也可以把对象转换成xml(反序列化),转json,List,等等方式
首先需要倒入相关jar包
1.创建modile对象
package com.yirong;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamOmitField;
@XStreamAlias("modile")
public class Modile {
@XStreamAsAttribute // 指定这个变量是属性
@XStreamAlias("id") // 属性名为id
private String id;
private String mobile;
private String type;
@XStreamOmitField //表示当前属性不会被序列化到xml中
private String code;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Override
public String toString() {
return "Modile [mobile=" + mobile + ", type=" + type + ", code=" + code + "]";
}
}
2.创建Company对象
package com.yirong;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("company")
public class Company {
private String name;
private String code;
@XStreamAlias("modiles") //如果这里不指定,就以list变量的名称当做节点
private List<Modile> mobileInfos;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<Modile> getMobileInfos() {
return mobileInfos;
}
public void setMobileInfos(List<Modile> mobileInfos) {
this.mobileInfos = mobileInfos;
}
@Override
public String toString() {
return "Company [name=" + name + ", code=" + code + ", mobileInfos=" + mobileInfos + "]";
}
}
3.创建XStrean的测试类
package com.yirong;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class TestXStream {
//初始化对象
private static Modile mobile = new Modile();
//初始化对象
private static Company company = new Company();
public static void main(String[] args) {
mobile.setId("1001");
mobile.setMobile("13400000000");
mobile.setType("1");
mobile.setCode("87365902");
Modile mobile2 = new Modile();
mobile2.setId("1002");
mobile2.setMobile("13400000001");
mobile2.setType("2");
mobile2.setCode("6955413");
ArrayList<Modile> mobileInfoList = new ArrayList<Modile>();
mobileInfoList.add(mobile);
mobileInfoList.add(mobile2);
company.setCode("JT1001");
company.setName("X集团");
company.setMobileInfos(mobileInfoList);
//初始化
XStream xStream = new XStream(new DomDriver());
//自动侦查注解
xStream.autodetectAnnotations(true);
//类重命名
// xStream.alias("modile", Modile.class);
// xStream.alias("company", Company.class);
//
// xStream.aliasField("haha", Company.class, "mobileInfos");
String xml = xStream.toXML(company); //转为xml格式的内容
System.out.println(xml);
Company company2 = (Company) xStream.fromXML(xml); //把xml内容转为java对象
System.out.println(company2);
writeToXml(xml);
xmlTojson();
}
/**
* xml到json的序列化与反序列化
*/
public static void xmlTojson() {
XStream xstream = new XStream(new JettisonMappedXmlDriver());//设置Json解析器
xstream.setMode(XStream.NO_REFERENCES);//设置reference模型,不引用
xstream.alias("人",Modile.class);//为类名节点重命名
//Json序列化
String json = xstream.toXML(company);
System.out.println("json格式:"+json);
//Json反序列化
company = (Company) xstream.fromXML(json);
System.out.println(company);
}
public static void writeToXml(String xml){
//写入数据
try {
OutputStreamWriter outw = new OutputStreamWriter(new FileOutputStream(new File("book.xml")));
try {
outw.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
outw.write(xml);
outw.close();
} catch (IOException e) {
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
}
}