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; } publicList getCities() { returncities; } publicvoidsetCities(List cities) { 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操作的在线工具供大家参考使用:
在线