XStream

1. 什么作用
  * 可以把JavaBean转换为(序列化为)xml

2. XStream的jar包
  * 核心JAR包:xstream-1.4.7.jar;
  * 必须依赖包:xpp3_min-1.1.4c(XML Pull Parser,一款速度很快的XML解析器);
3. 使用步骤
  * XStream xstream = new XStream();
  * String xmlStr = xstream.toXML(javabean);
4. 使用细节
  * 别名:把类型对应的元素名修改了
    > xstream.alias("china", List.class):让List类型生成的元素名为china
    > xstream.alias("province", Province.class):让Province类型生成的元素名为province
  * 使用为属性:默认类的成员,生成的是元素的子元素!我们希望让类的成员生成元素的属性
    > xstream.useAttributeFor(Province.class, "name"):把Province类的名为name成员,生成<province>元素的name属性
  * 去除Collection类型的成名:我们只需要Collection的内容,而不希望Collection本身也生成一个元素
    > xstream.addImplicitCollection(Province.class, "cities"):让Province类的名为cities(它是List类型的,它的内容还会生成元素)的成名不生成元素
  * 去除类的指定成名,让其不生成xml元素
    > xstream.omitField(City.class, "description"):在生成的xml中不会出现City类的名为description的对应的元素!

具体实例

  1. package cn.itcast.demo1;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.junit.Test;
  5. import com.thoughtworks.xstream.XStream;
  6. /**
  7. * 演示XStream
  8. * @author cxf
  9. *
  10. */
  11. public class Demo1 {
  12. // 返回javabean集合
  13. public List<Province> getProinvceList() {
  14. Province p1 = new Province();
  15. p1.setName("北京");
  16. p1.addCity(new City("东城区", "DongChengQu"));
  17. p1.addCity(new City("昌平区", "ChangPingQu"));
  18. Province p2 = new Province();
  19. p2.setName("辽宁");
  20. p2.addCity(new City("沈阳", "shenYang"));
  21. p2.addCity(new City("葫芦岛", "huLuDao"));
  22. List<Province> provinceList = new ArrayList<Province>();
  23. provinceList.add(p1);
  24. provinceList.add(p2);
  25. return provinceList;
  26. }
  27. /**
  28. <list> --> List类型显示list
  29. <cn.itcast.demo1.Province> --> javabean的类型为Province,它元素的名称为类的完整名
  30. <name>北京</name> --> javabean的属性名
  31. <cities> --> javabean的属性名
  32. <cn.itcast.demo1.City> --> 类名
  33. <name>东城区</name> --> 属性名
  34. <description>DongChengQu</description> --> 属性名
  35. </cn.itcast.demo1.City>
  36. <cn.itcast.demo1.City>
  37. <name>昌平区</name>
  38. <description>ChangPingQu</description>
  39. </cn.itcast.demo1.City>
  40. </cities>
  41. </cn.itcast.demo1.Province>
  42. <cn.itcast.demo1.Province>
  43. <name>辽宁</name>
  44. <cities>
  45. <cn.itcast.demo1.City>
  46. <name>沈阳</name>
  47. <description>shenYang</description>
  48. </cn.itcast.demo1.City>
  49. <cn.itcast.demo1.City>
  50. <name>葫芦岛</name>
  51. <description>huLuDao</description>
  52. </cn.itcast.demo1.City>
  53. </cities>
  54. </cn.itcast.demo1.Province>
  55. </list>
  56. */
  57. @Test
  58. public void fun1() {
  59. List<Province> proList = getProinvceList();
  60. /*
  61. * 创建XStream对象
  62. * 调用toXML把集合转换成xml字符串
  63. */
  64. XStream xstream = new XStream();
  65. String s = xstream.toXML(proList);
  66. System.out.println(s);
  67. }
  68. /*
  69. * 别名(alias)
  70. * 希望:
  71. * * 默认List类型对应<list>元素,希望让List类型对应<china>元素
  72. * * 默认Province类型对应<cn.itcast.demo1.Province>,希望让它对应<province>
  73. * * 默认City类型对应<cn.itcast.demo1.City>,希望它对应<city>元素
  74. */
  75. /*
  76. <china>
  77. <province>
  78. <name>北京</name>
  79. <cities>
  80. <city>
  81. <name>东城区</name>
  82. <description>DongChengQu</description>
  83. </city>
  84. <city>
  85. <name>昌平区</name>
  86. <description>ChangPingQu</description>
  87. </city>
  88. </cities>
  89. </province>
  90. <province>
  91. <name>辽宁</name>
  92. <cities>
  93. <city>
  94. <name>沈阳</name>
  95. <description>shenYang</description>
  96. </city>
  97. <city>
  98. <name>葫芦岛</name>
  99. <description>huLuDao</description>
  100. </city>
  101. </cities>
  102. </province>
  103. </china>
  104. */
  105. @Test
  106. public void fun2() {
  107. List<Province> proList = getProinvceList();
  108. XStream xstream = new XStream();
  109. /*
  110. * 给指定的类型指定别名
  111. */
  112. xstream.alias("china", List.class);//给List类型指定别名为china
  113. xstream.alias("province", Province.class);//给Province指定别名为province
  114. xstream.alias("city", City.class);//给City类型指定别名为city
  115. String s = xstream.toXML(proList);
  116. System.out.println(s);
  117. }
  118. /*
  119. * 默认javabean的属性都会生成子元素,而现在希望生成元素的属性
  120. */
  121. /*
  122. <china>
  123. <province name="北京">
  124. <cities>
  125. <city>
  126. <name>东城区</name>
  127. <description>DongChengQu</description>
  128. </city>
  129. <city>
  130. <name>昌平区</name>
  131. <description>ChangPingQu</description>
  132. </city>
  133. </cities>
  134. </province>
  135. <province name="辽宁">
  136. <cities>
  137. <city>
  138. <name>沈阳</name>
  139. <description>shenYang</description>
  140. </city>
  141. <city>
  142. <name>葫芦岛</name>
  143. <description>huLuDao</description>
  144. </city>
  145. </cities>
  146. </province>
  147. */
  148. @Test
  149. public void fun3() {
  150. List<Province> proList = getProinvceList();
  151. XStream xstream = new XStream();
  152. xstream.alias("china", List.class);//给List类型指定别名为china
  153. xstream.alias("province", Province.class);//给Province指定别名为province
  154. xstream.alias("city", City.class);//给City类型指定别名为city
  155. /*
  156. * 把Province类型的name属性,生成<province>元素的属性
  157. */
  158. xstream.useAttributeFor(Province.class, "name");
  159. String s = xstream.toXML(proList);
  160. System.out.println(s);
  161. }
  162. /*
  163. * 去除List类型的属性,只把list中的元素生成xml元素
  164. */
  165. /*
  166. <china>
  167. <province name="北京">
  168. <city>
  169. <name>东城区</name>
  170. <description>DongChengQu</description>
  171. </city>
  172. <city>
  173. <name>昌平区</name>
  174. <description>ChangPingQu</description>
  175. </city>
  176. </province>
  177. <province name="辽宁">
  178. <city>
  179. <name>沈阳</name>
  180. <description>shenYang</description>
  181. </city>
  182. <city>
  183. <name>葫芦岛</name>
  184. <description>huLuDao</description>
  185. </city>
  186. </province>
  187. </china>
  188. */
  189. @Test
  190. public void fun4() {
  191. List<Province> proList = getProinvceList();
  192. XStream xstream = new XStream();
  193. xstream.alias("china", List.class);//给List类型指定别名为china
  194. xstream.alias("province", Province.class);//给Province指定别名为province
  195. xstream.alias("city", City.class);//给City类型指定别名为city
  196. xstream.useAttributeFor(Province.class, "name");//把Province类型的name属性,生成<province>元素的属性
  197. /*
  198. * 去除<cities>这样的Collection类型的属性
  199. * 去除Provice类的名为cities的List类型的属性!
  200. */
  201. xstream.addImplicitCollection(Province.class, "cities");
  202. String s = xstream.toXML(proList);
  203. System.out.println(s);
  204. }
  205. /**
  206. * 去除不想要的javabean属性
  207. * 就是让某引起javabean属性,不生成对应的xml元素!
  208. */
  209. /*
  210. <china>
  211. <province name="北京">
  212. <city>
  213. <name>东城区</name>
  214. </city>
  215. <city>
  216. <name>昌平区</name>
  217. </city>
  218. </province>
  219. <province name="辽宁">
  220. <city>
  221. <name>沈阳</name>
  222. </city>
  223. <city>
  224. <name>葫芦岛</name>
  225. </city>
  226. </province>
  227. </china>
  228. */
  229. @Test
  230. public void fun5() {
  231. List<Province> proList = getProinvceList();
  232. XStream xstream = new XStream();
  233. xstream.alias("china", List.class);//给List类型指定别名为china
  234. xstream.alias("province", Province.class);//给Province指定别名为province
  235. xstream.alias("city", City.class);//给City类型指定别名为city
  236. xstream.useAttributeFor(Province.class, "name");//把Province类型的name属性,生成<province>元素的属性
  237. xstream.addImplicitCollection(Province.class, "cities");//去除Provice类的名为cities的List类型的属性!
  238. /*
  239. * 让City类的,名为description属性不生成对应的xml元素
  240. */
  241. xstream.omitField(City.class, "description");
  242. String s = xstream.toXML(proList);
  243. System.out.println(s);
  244. }
  245. }

XStream(xml/bean转换)的更多相关文章

  1. SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转

    SpringMVC关于json.xml自动转换的原理研究[附带源码分析] 原文地址:http://www.cnblogs.com/fangjian0423/p/springMVC-xml-json-c ...

  2. SpringMVC源码阅读:Json,Xml自动转换

    1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...

  3. Spring源码-IOC部分-Xml Bean解析注册过程【3】

    实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring ...

  4. 项目中运行报错: Loading XML bean definitions from class path resource [applicationContext.xml]

    记录一下: org.springframework.context.support.AbstractApplicationContext prepareRefresh Refreshing org.s ...

  5. 将bean转换成键值列表

    日常开发中在进行接口对接的数据传输时,有一种场景是将bean转成jsonString,这里可以将bean转换成Map再转成jsonString. 工具类如下: public static String ...

  6. 利用JAXB实现java实体类和xml互相转换

    1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同 ...

  7. 将Xml字符串转换成(DataTable || DataSet || XML)对象

    今天用到一个功能:就是把从数据库读出来的内容转换成XML字符串流格式,并输出给一个功能函数.在写的过程,为方便以后的使用,我对这一功能进行分装.该类的具体格式如下:XmlConvert类命名空间:Ni ...

  8. json串转化成xml文件、xml文件转换成json串

    1.json串转化成xml文件 p=[{"name":"tom","age":30,"sex":"男" ...

  9. JAXB实现java对象与xml之间转换

    JAXB简介: 1.JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标 ...

随机推荐

  1. mysql 数据库 自动截取数据的问题---mysql的sql_model的四种模式:宽松模式、严格模式

    mysql支持的sql_mode模式:ANSI.TRADITIONAL.STRICT_ALL_TABLES和STRICT_TRANS_TABLES. ANSI模式:宽松模式,对插入数据进行校验,如果不 ...

  2. 条件随机场(CRF)-基础

    条件随机场(conditional random fields,简称 CRF,或CRFs)下文简称CRF,是一种典型的判别模型,相比隐马尔可夫模型可以没有很强的假设存在,在分词.词性标注.命名实体识别 ...

  3. Java复习——网络编程

    Java从最开始就是支持网络编程的,也正是网络使Java得到发展繁荣.在这里我记录一下如何使用Java进行网络编程,什么是Socket以及Java实现TCP,UDP的编程模型. InetAddress ...

  4. 【BZOJ】1218: [HNOI2003]激光炸弹(前缀和)

    题目 题目描述 输入输出格式 输入格式: 输入文件名为input.txt 输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ,vi . 输出格式: 输出文件名为 ...

  5. Git学习之常用的命令

    配置git git config --global user.name "你的github用户名" git config --global user.email "你的G ...

  6. ghostscript 远程命令执行漏洞复现

    影响的版本 <= 9.23(全版本.全平台) Ubuntu 开启 ghostscript sch01ar@ubuntu:~$ gs -q -sDEVICE=ppmraw -dSAFER -s0u ...

  7. 【转】Android Studio打包全攻略---从入门到精通

    原文地址:http://blog.csdn.net/zivensonice/article/details/51672846 初出茅庐 手动打包 怎么手动打包 项目写完了,现在需要把应用上传到市场,问 ...

  8. ubuntu 开机 输入密码 无法进入

    1.给笔记本装了ubuntu14.04.4, 发现开机到输入密码的环节之后,验证正确,然而无法进入桌面,一直在密码页循环. 2.网上找了好多方法,进入命令行(ctrl+alr+F1)登录,能登录进去: ...

  9. Spring MVC起步

    1.1跟踪Spring MVC的请求 每当用户在Web浏览器中点击链接或提交表单的时候,请求就开始工作了.对请求的工作描述就像是快递投送员.与邮局投递员或FedEx投送员一样,请求会将信息从一个地方带 ...

  10. Linux git 关联 github仓库

    背景: 由于最近学习Spring cloud docker 一键部署, 需要把github仓库项目, 放在Linux上面启动, (以下位置在/root/目录中执行)步骤, 1:安装 git >y ...