Javabean基于xstream包实现转XML文档的方法
本文实例讲述了Javabean基于xstream包实现转XML文档的方法。分享给大家供大家参考,具体如下:
1.所需Jar包:
xpp3_min.jar
xstream.jar
本站下载地址。
把这两个jar所添加到项目中
2.添加两个用于测试的javabean:Province和City
classProvince
{
privateStringname;//省名
privateListcities=newArrayList();
publicStringgetName()
{
returnname;
}
publicvoidsetName(Stringname)
{
this.name=name;
}
publicListgetCities()
{
returncities;
}
publicvoidsetCities(Listcities)
{
this.cities=cities;
}
publicvoidaddCity(Citycity)
{
cities.add(city);
}
}
classCity
{
privateStringname;//市名
privateStringdescription;//描述
privateString[]counties;//该市的所有县
publicStringgetName()
{
returnname;
}
publicvoidsetName(Stringname)
{
this.name=name;
}
publicString[]getCounties()
{
returnthis.counties;
}
publicvoidsetCounties(String[]countries)
{
this.counties=countries;
}
publicStringgetDescription()
{
returndescription;
}
publicvoidsetDescription(Stringdescription)
{
this.description=description;
}
@Override
publicStringtoString()
{
return"City[name="+name+",description="+description+"]";
}
publicCity()
{
super();
}
publicCity(Stringname,Stringdescription)
{
super();
this.name=name;
this.description=description;
}
}
XStream提供了方法toXML(Objectobj),把生成的xml文档以字符串的形式返回。
XStream#alias()方法可以更改生成元素的Tag名称,如果不设置Tag名,则会以Class的字符串形式作为Tag名,如:Java.lang.String。
XStream#useAttributeFor()方法可以把Javabean的属性转换成xml元素的属性。
XStream#addImplicitCollection()方法可以把Javabean中的集合元素,如List,里面的每一个元素,直接变成一个个子元素,而不会另外生成一个元素用来作为这些子元素的父元素。
XStream#addImplicitArray()方法和addImplicitCollection()一样,只是集合变为了数组。
下面是测试的代码:
packagecom.song.demo;
importjava.util.ArrayList;
importjava.util.List;
importcom.thoughtworks.xstream.XStream;
publicclassBeanToXml
{
publicstaticvoidmain(String[]args)
{
//创建一个JavaBean
ListproList=newArrayList();
//广东省
ProvincegdProvince=newProvince();
gdProvince.setName("广东省");
CitygzCity=newCity("广州市","广东省省会");
gzCity.setCounties(newString[]{"海珠区","天河区","白云区"});
gdProvince.addCity(gzCity);
gdProvince.addCity(newCity("韶关","粤北城市"));
//北京市
ProvincebjProvince=newProvince();
bjProvince.setName("北京市");
bjProvince.addCity(newCity("东城区","北京市东城区"));
bjProvince.addCity(newCity("西城区","北京市西城区"));
proList.add(gdProvince);
proList.add(bjProvince);
//使用默认的方式生成xml
//System.out.println(toXML1(proList));
//处理JavaBean中的集合属性,直接生成子节点
System.out.println(toXml2(proList));
}
privatestaticStringtoXml2(Objectobj)
{
XStreamstream=newXStream();
//更改List类型的元素的显示名称
stream.alias("中国",List.class);
stream.alias("省份",Province.class);
stream.alias("城市",City.class);
stream.alias("区-县",String.class);
//把Province类中的name属性生成为元素的属性
stream.useAttributeFor(Province.class,"name");
//把JavaBean中的集合元素直接变成子节点,面不另外再生成一个节点,该节点包含所有的子节点:
//如:
/*
*
*
*
*
*
*转换成:
*
*
*/
//集合类型:cities为List类型
stream.addImplicitCollection(Province.class,"cities");
//数组类型:counties为String[]类型
stream.addImplicitArray(City.class,"counties");
returnstream.toXML(obj);
}
}
测试结果:
<中国> <省份name="广东省"> <城市>广州市 广东省省会 <区-县>海珠区区-县> <区-县>天河区区-县> <区-县>白云区区-县> 城市> <城市>韶关 粤北城市 城市> 省份> <省份name="北京市"> <城市>东城区 北京市东城区 城市> <城市>西城区 北京市西城区 城市> 省份> 中国>
PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线