依赖:
<!-- xstream -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.10</version>
</dependency>
最近有个需求,要用特定格式的xml格式的数据进行数据更新,这样,用XStream来把你的实体做成你要的xml格式,先开一个小菜:
参考xml格式:
<field id="description" name="商品描述" type="input">
<value>
内容
</value>
</field>
首先我们可以分析一下,value标签内的数据都是我们所需要更新的内容,我们可以用一个简单的bean去创建它:
1.创建实体:
从xml中我们取得关键信息:id,name,type,value,这四项作为我们关键的bean信息 创建:Description.java 文件:
@Data
public class Description {
private String value;
private String id;
private String name;
private String type;
}
2.解析输出:
2.1 这里有个field标签,和我们的bean没有:
xStream.alias(“filed",Description.class);
用上面的方法就可以了,当你是Description类的时候,会自然的当作field标签和看待
2.2 name,type等里面是有信息的呀,如何到这个field标签里面去呢?
Stream.useAttributeFor(Description.class,“name”);
从方法的名字可以看出,用 属性 对于 拆看一看,经验的coder马上就知道有戏了,说明name是这个field的属性,自然会在field的标签里面
2.3 toXML
xStream.toXML(description);
3.小demo:
public static void main(String[] args) {
Description description = new Description();
description.setValue("url");
description.setName("商品描述");
description.setType("input");
description.setId("description");
XStream xStream = new XStream();
xStream.alias("filed",Description.class);
xStream.useAttributeFor(Description.class,"name");
xStream.useAttributeFor(Description.class,"type");
xStream.useAttributeFor(Description.class,"id");
String out = xStream.toXML(description);
System.out.println(out);
}
结果当然是和上述一致了
分割线:
如果需求都是这么简单的xml那不是很舒服?呵呵!而且xml里面命名可不是和Java一样的,比如complex-values,不是下划线,这种的如何处理呢?
xStream2.aliasField(“complex-values”,class.class,“complexValues”);
complexValues是你bean的属性名,complex-values是你要做成标签的名称
以上,基本都可以通过注解实现。