Javabean基于xstream包实现转XML文档的方法
程序员文章站
2024-02-18 12:56:58
本文实例讲述了javabean基于xstream包实现转xml文档的方法。分享给大家供大家参考,具体如下:
1. 所需jar包:
xpp3_min.jar
xstre...
本文实例讲述了javabean基于xstream包实现转xml文档的方法。分享给大家供大家参考,具体如下:
1. 所需jar包:
xpp3_min.jar
xstream.jar
本站下载地址。
把这两个jar所添加到项目中
2. 添加两个用于测试的javabean:province和city
class province { private string name;// 省名 private list<city> cities = new arraylist<city>(); public string getname() { return name; } public void setname(string name) { this.name = name; } public list<city> getcities() { return cities; } public void setcities(list<city> cities) { this.cities = cities; } public void addcity(city city) { cities.add(city); } } class city { private string name;// 市名 private string description;// 描述 private string[] counties; // 该市的所有县 public string getname() { return name; } public void setname(string name) { this.name = name; } public string[] getcounties() { return this.counties; } public void setcounties(string[] countries) { this.counties = countries; } public string getdescription() { return description; } public void setdescription(string description) { this.description = description; } @override public string tostring() { return "city [name=" + name + ", description=" + description + "]"; } public city() { super(); } public city(string name, string description) { super(); this.name = name; this.description = description; } }
xstream提供了方法toxml(object obj),把生成的xml文档以字符串的形式返回。
xstream#alias() 方法可以更改生成元素的tag名称,如果不设置tag名,则会以class的字符串形式作为tag名,如:java.lang.string。
xstream#useattributefor() 方法可以把javabean的属性转换成xml元素的属性。
xstream#addimplicitcollection() 方法可以把javabean中的集合元素,如list,里面的每一个元素,直接变成一个个子元素,而不会另外生成一个元素用来作为这些子元素的父元素。
xstream#addimplicitarray() 方法和addimplicitcollection()一样,只是集合变为了数组。
下面是测试的代码:
package com.song.demo; import java.util.arraylist; import java.util.list; import com.thoughtworks.xstream.xstream; public class beantoxml { public static void main(string[] args) { // 创建一个javabean list<province> prolist = new arraylist<province>(); // 广东省 province gdprovince = new province(); gdprovince.setname("广东省"); city gzcity = new city("广州市", "广东省省会"); gzcity.setcounties(new string[]{"海珠区", "天河区", "白云区"}); gdprovince.addcity(gzcity); gdprovince.addcity(new city("韶关", "粤北城市")); // 北京市 province bjprovince = new province(); bjprovince.setname("北京市"); bjprovince.addcity(new city("东城区", "北京市东城区")); bjprovince.addcity(new city("西城区", "北京市西城区")); prolist.add(gdprovince); prolist.add(bjprovince); // 使用默认的方式生成xml // system.out.println(toxml1(prolist)); // 处理javabean中的集合属性,直接生成子节点 system.out.println(toxml2(prolist)); } private static string toxml2(object obj) { xstream stream = new xstream(); // 更改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> * <city /> * <city /> * </cities> * * 转换成: * <city /> * <city /> */ // 集合类型:cities为list类型 stream.addimplicitcollection(province.class, "cities"); // 数组类型:counties为string[] 类型 stream.addimplicitarray(city.class, "counties"); return stream.toxml(obj); } }
测试结果:
<中国> <省份 name="广东省"> <城市> <name>广州市</name> <description>广东省省会</description> <区-县>海珠区</区-县> <区-县>天河区</区-县> <区-县>白云区</区-县> </城市> <城市> <name>韶关</name> <description>粤北城市</description> </城市> </省份> <省份 name="北京市"> <城市> <name>东城区</name> <description>北京市东城区</description> </城市> <城市> <name>西城区</name> <description>北京市西城区</description> </城市> </省份> </中国>
ps:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线xml/json互相转换工具:
在线格式化xml/在线压缩xml:
xml在线压缩/格式化工具:
xml代码在线格式化美化工具:
更多关于java算法相关内容感兴趣的读者可查看本站专题:《java数据结构与算法教程》、《java操作dom节点技巧总结》、《java文件与目录操作技巧汇总》和《java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。