city

package xstream;

public class City {
private String name;
private String description; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public City(String name, String description) {
this.name = name;
this.description = description;
}
}

province

package xstream;

import java.util.ArrayList;
import java.util.List; public class Province {
private String name;
private List<City> cities = new ArrayList<City>(); public void addCity(City city){
cities.add(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 Province(String name, List<City> cities) {
super();
this.name = name;
this.cities = cities;
} public Province() {} public Province(String name) {
this.name = name;
}
}

 测试类

 

package xstream;

import java.util.ArrayList;
import java.util.List; import org.junit.Test; import com.thoughtworks.xstream.XStream; public class TestXStream {
public List<Province> getProvinceList(){
List<Province> provinceList = new ArrayList<Province>(); Province p1 = new Province("北京");
p1.addCity(new City("东城区","东城区"));
p1.addCity(new City("西城区","西城区")); Province p2 = new Province("上海");
p2.addCity(new City("徐汇区","徐汇区"));
p2.addCity(new City("浦东新区","浦东新区")); provinceList.add(p1);
provinceList.add(p2); return provinceList;
}
//--->原生版
@Test
public void fun(){
List<Province> proList = getProvinceList();
XStream xStream = new XStream();
String xml = xStream.toXML(proList);
System.out.println(xml);
} //--->修改
@Test
public void fun1(){
List<Province> proList = getProvinceList();
XStream xStream = new XStream(); //别名
xStream.alias("china", java.util.List.class);
xStream.alias("province", Province.class);
xStream.alias("city", City.class); //把子元素变成父元素的属性
xStream.useAttributeFor(Province.class, "name"); //去掉容器,"剥皮"
xStream.addImplicitCollection(Province.class, "cities"); //忽略不需要的属性-xml的元素
xStream.omitField(City.class, "description"); String xml = xStream.toXML(proList);
System.out.println(xml);
} }

 

子元素转换成属性


去掉集合元素("剥皮")


忽略不需要的元素

 

  

XStream别名;元素转属性;去除集合属性(剥皮);忽略不需要元素的更多相关文章

  1. Struts(二十一):类型转换与复杂属性、集合属性配合使用

    背景: 本章节主要以复杂属性.集合属性类型转化为例,来学习这两种情况下怎么使用. 复杂对象属性转换场景: 1.新建struts_04 web.xml <?xml version="1. ...

  2. 使用jQuery异步传递含复杂属性及集合属性的Model到控制器方法

    Student类有集合属性Courses,如何把Student连同集合属性Courses传递给控制器方法?     public class Student     {         public ...

  3. Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

    1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; privat ...

  4. (转)Hibernate框架基础——映射集合属性

    http://blog.csdn.net/yerenyuan_pku/article/details/52745486 集合映射 集合属性大致有两种: 单纯的集合属性,如像List.Set或数组等集合 ...

  5. 编写高质量代码改善C#程序的157个建议——建议25:谨慎集合属性的可写操作

    建议25:谨慎集合属性的可写操作 如果类型的属性中有集合属性,那么应该保证属性对象是由类型本身产生的.如果将属性设置为可写,则会增加抛出异常的几率.一般情况下,如果集合属性没有值,则它返回的Count ...

  6. {03--CSS布局设置} 盒模型 二 padding bode margin 标准文档流 块级元素和行内元素 浮动 margin的用法 文本属性和字体属性 超链接导航栏 background 定位 z-index

    03--CSS布局设置 本节目录 一 盒模型 二 padding(内边距) 三 boder(边框) 四 简单认识一下margin(外边距) 五 标准文档流 六 块级元素和行内元素 七 浮动 八 mar ...

  7. MongoDB学习笔记~对集合属性的操作

    回到目录 $unset清除元素 请注意在单个数组元素上使用$unset的结果可能与你设想的不一样.其结果只是将元素的值设置为null,而非删除整个元素.要想彻底删除某个数组元素,可以用$pull 和$ ...

  8. MongoDB学习笔记~数据模型属性为集合时应该为它初始化

    回到目录 今天要说一下技术点,我们在设计mongodb的数据模型时,如果属性是数组或者集合类型,我们在模型初始化时,需要为它们初始化一下,否则在数据库里将会被存储为NULL,当被存储为NULL时,我们 ...

  9. [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. 【转载】Linux 系统时间查看 及 时区修改(自动同步时间)

    1:使用date命令查看时区 [root@db-server ~]# date -R   Sun, 11 Jan 2015 07:10:28 -0800   [root@db-server ~]#   ...

  2. Python Unicode 转换 字符串

    estimate_price = "\u00a340\u00a0\u00a0-\u00a060" sold_price = "Sold for \u00a345" ...

  3. Atitit.基于时间戳的农历日历历法日期计算

    Atitit.基于时间戳的农历日历历法日期计算 1. 农历xx年的大小月份根据万年历查询1 2. 农历xx年1月1日的时间戳获取1 3. 计算当年的时间戳与农历日期的对应表,时间戳为key,日期为va ...

  4. Atitit.软件仪表盘(2)--vm子系统--资源占用监测

    Atitit.软件仪表盘(2)--vm子系统--资源占用监测 1.  Jvisualvm.exe 2. jprofile 3. Heap //permgen   monitor 作者::老哇的爪子At ...

  5. 【Android】12.6 利用Intent实现记事本功能(NotePad)

    分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 这个例子演示如何实现一个简单的记事本功能. 该例子提前使用了后面章节将要介绍的SQLLite数据库. 二.示例-c ...

  6. CCCallFunc CCCallFuncN CCCallFuncND的区别和使用

    CCCallFunc CCCallFuncN CCCallFuncND都用来创建带有回调函数的动作,区别主要在于回调函数是否带有参数 CCCallFunc是执行对应的回调函数,其中回调函数不可带参数. ...

  7. vue项目中,main.js,App.vue,index.html如何调用

    1.main.js是我们的入口文件,主要作用是初始化vue实例,并引入所需要的插件 2.App.vue是我们的主组件,所有页面都是在App.vue下进行切换的.其实你也可以理解为所有的路由也是App. ...

  8. [转] C#与Java的比较

    [转] C#与Java的比较 转自:C#与Java的比较 2015-06-26 目录 一.C#.C++和Java二.语言规范的比较  2.1.简单数据类型  2.2.常量  2.3.公用类的入口点  ...

  9. 自定义流水号的autocode

    ; } }; ); dac.executeUpdate(); , TimeUnit.); ); ); } ); }}

  10. python模块之codecs: 自然语言编码转换

    python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理.    有一点需要清楚的是,当python要做编码转换的时候,会借助于内部 ...