首页 > 代码库 > XStream学习笔记

XStream学习笔记


XStream

所需jar包:
xstream-1.3.jar
xpp3_min-1.1.4c.jar
xmlpull-1.1.3.1.jar

目录:
1.注解去除,标签中带有包名的节点
2.注解修改,标签中的字段名
3.注解去除,XML中的额外标签
4.注解修改,XML中的标签 |同时也可以解决,XML中节点重名问题
5.隐藏集合标签
6.注解忽略字段,在POJO中有的字段不想让他生成xml

=====================================================================================================

1.注解解除,标签中带有包名的节点:
例如:
<com.ultimate.incoming.util.Dome>
<car>BMW</car>
</com.ultimate.incoming.util.Dome>

解决办法:
⑴ 实例化 XStream 时,在其参数中实例化 DomDriver
不使用参数时,会默认使用KXml2 的解析工具

private XStream xStream = new XStream(new DomDriver());

⑵ 在ClassToXml工具类中调用Annotations的静态方法configureAliases
!!! 用到到注解都需要添加此步骤
指派XStream主动去解析annotation,将XStream实例放入configureAliases参数中
topLevelClasses:Dome.class

Annotations.configureAliases(xStream, topLevelClasses)

⑶ 在实体类的类名上添加注解:使其替代</com.ultimate.incoming.util.Dome>

@XStreamAlias("Dome")
public class Dome {}

修改后:
<Dome>
<car>BMW</car>
</Dome>


如果想用注解方式:也可以用 xStream.alians("person",Person.class); 去替换
                                                                         1
=====================================================================================================

2.注解修改,标签中的字段名

例如:Dome中想将car标签修改为bike

<Dome>
<car>BMW</car>
</Dome>

解决办法:
⑴ 保证你的ClassToXml中带有
Annotations.configureAliases(xStream, topLevelClasses)

⑵ 在要更改的实体类的属性上添加 @XStreamAlias("要更改的名字")

@XStreamAlias("bike")
private String car;

修改后:
<Dome>
<bike>BMW</bike>
</Dome>
                                                                         2
=====================================================================================================

3.注解去除,XML中的car标签

例如:
<Dome>
<car>
<string>兰博基尼</string>
<string>保时捷</string>
</car>
</Dome>

解决方法:
⑴ 同第二页中的第一步

⑵ 在要去除的属性上加上@XStreamImplicit

@XStreamImplicit
private List car;

修改后:
<Dome>
<string>兰博基尼</string>
<string>保时捷</string>
</Dome>

                                                                         3
=====================================================================================================

4.注解修改,XML中的string标签 | 同时也可以解决,XML中节点重名问题

例如:
<Dome>
<string>兰博基尼</string>
<string>保时捷</string>
</Dome>

解决方法:
⑴ 同第二页中的第一步

⑵ 在要修改的属性上加上@XStreamImplicit(itemFieldName="想要修改的名称")

@XStreamImplicit(itemFieldName="car")
private List car;

注:到此步骤修改后,如下:会多出来个 class="string"
<Dome>
<car class="string">兰博基尼</car>
<car class="string">保时捷</car>
</Dome>

⑶ 去除class="string",要规定属性List的泛型
@XStreamImplicit(itemFieldName="car")
private List<String> car;


修改后:
<Dome>
<car>兰博基尼</car>
<car>保时捷</car>
</Dome>

                                                                         4
=====================================================================================================

5.隐藏集合标签:直接干掉bike标签

注:只是单独的去掉了集合标签,但对string元素的名字不能修改,
如果想修改名字请从第3页做到第4页

例如:
<Dome>
<bike>
<string>飞鸽</string>
<string>东风</string>
</bike>
</Dome>

⑴ 在ClassToXml中配置 xStream.addImplicitCollection(要修改的类名.class,"要去掉的集合名字");

修改后:
<Dome>
<string>飞鸽</string>
<string>东风</string>
</Dome>

                                                                         5
=====================================================================================================

6.忽略字段,在POJO中有的字段不想让他生成xml

例如:不想让bike这个集合生成xml
<Dome>
<bike>
<string>飞鸽</string>
<string>东风</string>
</bike>
</Dome>

⑴ 在属性上添加 @XStreamOmitField

@XStreamOmitField
private List<String> bike;

修改后:
<Dome/>

                                                                        6
====================================================================================================

XStream学习笔记