从上面的类的结构可以看出,通过类的包含关系,分别对应到xml格式的对应元素上。
通过注解,可以设置属性字段的名称,如@XStreamAlias
ADI adi = new ADI();
........设置ADI类以及子类的所有属性
XStream xstream = new XStream(new XppDriver(new NoNameCoder()));
使用NoNameCoder,是为了避免带下划线的字段,在生成xml时被自动替换为双下划线的问题。
try {
PrintWriter writer = new PrintWriter("f:/ADVV2001081701004000.xml","utf-8");
//自己写xml头部
writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
//设置Xstream解析注解
xstream.autodetectAnnotations(true);
//String类型字段解析为xml属性而为子节点
xstream.useAttributeFor(String.class);
//设置类的别名
xstream.alias("ADI", ADI.class);
xstream.alias("App_Data", AppData.class);
//忽略集合名称,也就是生成的xml中不包含集合名称的节点,而是把集合元素输出
xstream.addImplicitCollection(Metadata.class, "appDatas");
xstream.toXML(adi, writer);
} catch (Exception e) {
e.printStackTrace();
}
通过上面的注释,可以很容易理解。如果类有package,通过alias,可以设置类的输出别名,从而去掉包名的影响。