开发者学堂课程【Ajax:XStream(可把javabean转换成XMI的小工具)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/31
XStream可以把JavaBean转换为(序列化为)xm1。
XStream的jar包
核心JAR包: xstzeam-1.4.7.jar:
必须依赖包: xpp3_min-1.1.4c (xz Pull Parser,一款速度很快的x江解析器) :
使用步骤:
XStream xstream = new XStream() ;
String xmlStr . xstream. toXML (j avabean) ;
为演示XStream的作业,需要写两个类,分别是Province和City。
例如
City.java
public class City {
private String name ;
private String description; |
Province.java
public class Province {List<Province
private String name;
private List<city> cities = new ArrayList <city>();
public void addcity(City city) {
cities.add (city) ; |
演示XStream
//返回javabean集合
public List<Province> getProinvceList() I
Province p1 new Province() ;
p1.setName ("北京") ;
p1. addcity (new city ("东城区", "DongChengQu")) ;
p1.addcity(new city("昌平区", "ChangPingQu")) ;
Province p2 new Province () ;
p2.setName ("辽宁") ;
p2.addcity (new city("沈阳", "shenYang"));
p2.addcity (new City("葫芦岛","huLuDao")) ;
List<Province> provinceLigtE new ArrayList <Province> () ;provincelist.add(p1) ;
provinceList.add(p2) ;
return provincelist;这样就可以轻易返回集合。
接下来创建XStream对象
调用toXML把集合转换成xm1字符串
第一步xstream xstream F new XStream() ;
第二步string s = xstream. toXML (prolist) ;
System. out.print1n(s) ;
结果这些字符串变成
<list>
<cn. itcast. demo1. Province>
<name>北京</ name>
<cities>
<cn. itcast . demo1.City>
<name〉东城区</name>
<description>DongChengQu</description>
</cn. itcast.demo1.city>
<cn. itcast.demo1.City>
<name>昌平区</ name>
<description>ChangPi ngQu</ description>
</cn. itcast.demo1.city>
</cities>
</cn.itcast.demo1.Province
demo1. Province>
<name>辽宁</name>
<cities>
<en. itcast.demo1.city>
<name>沈阳</name>
<nameruuasenshenyenae/description></cn. itcast.demo1.city>
<cn. itcast.demo1.city>
<name>葫芦岛</ name>
: de cription>huluDaodescription><descxapt.aemo1.city>
</cn. itcast.demo Province>
〈list〉
List类型显示为list
对象显示成类名,它元素的名称为类的完整名。
別名(alias)
希望:
默认List类型对应<1ist>元素,希望让List类型対立<china>元素
默认province类型对应<cn. itcast . demo1. province>,希望让它对应<province>、
默认city类型对应<cn. itcast .demo1.city>,希望它对应<city>元素
要给指定的类型指定别名
xstream.alias ("china", List.class) ;/ /给List类型指定别名为china
xstream.alias ("province", Province . class) ;//给province指定别名为pzovince
xstream.alias("city", city. class);//给city类型指定别名为city
string s = xstream. toXML (proList) ;
默认javabean的属性都会生成子元素,而现在希望生成元素的属性。
要把Province类型的name属性,生成province元素的属性。
光写name是不可以的,必须指定类型,之后字符串也会发生相应的变化。
去除cities这样的collection类型的属性
去除province类的名为cities的list类型的属性!
去除list类型的属性,只把list的元素生成xml元素
要是想去掉不想要的javabean属性,也就是让某引起javabean属性,不生成对应的xml元素
让city类的,名为describtion属性不生成对应的xml元素,xstream. omitField(city.class, "description");
结果就变为
<china>
<province name=“北京”>
<city>
<name>东城区</name>
</city>
<city>
<name>昌平区</name>
</city>
</province >
<province name="辽宁">
<city>
<name>沈阳< 1 name>
</city>
<city>
<name>葫芦岛</ name>
</city>
</province>
</china>
总结:
XStream的使用细节:
别名:把类型对应的元素名修改了
xstream.alias ("china", List .clas3):让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类型的,它的内容还会生成元素)的成名不生成元素去除类的指定成名,让其不生成xm1元素
> xstream. omitField(City.class, "description"): 在生成的xml中不会出现City类的名为description的对应的元素!