XStream 解析xml 转 javaBean 问题

xstream解析后获取不到属性值的问题解决办法2种:
方法一:属性值在类中指定
xstream.useAttributeFor(ChildNav.class,"name");
xstream.useAttributeFor(ChildNav.class,"url");
方法二,通过方法处理:
/**
*@author
*ChildNav属性值转换器
*/
//publicclassChildNavConverterimplementsConverter{
//
//publicvoidmarshal(Objectvalue,HierarchicalStreamWriterwriter,MarshallingContextcontext){
//ChildNavchildNav=(ChildNav)value;
//writer.addAttribute("name",childNav.getName());
//writer.addAttribute("url",childNav.getUrl());
//}
//
//publicObjectunmarshal(HierarchicalStreamReaderreader,UnmarshallingContextcontext){
//ChildNavchildNav=newChildNav();
////city.setName(reader.getValue());
//childNav.setName(reader.getAttribute("name"));
//childNav.setUrl(reader.getAttribute("url"));
//returnchildNav;
//}
//
//publicbooleancanConvert(Classclazz){
//returnclazz.equals(ChildNav.class);
//}
//
//}

调用方法//xstream.registerConverter(newChildNavConverter());
/*******************************************************************************************************************/
详细代码解析:
XStreamxstream=newXStream();
Filexml=newFile(fileName);
BufferedReaderreader=newBufferedReader(newInputStreamReader(newFileInputStream(xml),"UTF-8"));
//xml文档中节点映射到对应的类
xstream.alias("childNav",ChildNav.class);
xstream.alias("nav",Nav.class);
xstream.alias("permissions",Permissions.class);
//xml文档属性值与对象属性值的对应。(这里可以映射别名)
xstream.aliasField("name",Nav.class,"name");
xstream.aliasField("name",ChildNav.class,"name");
xstream.aliasField("url","url");

//声明对象中的属性值是xml文档中对应的属性而不是节点(不加这个可能会造成解析后的对象属性的值是null)
xstream.useAttributeFor(ChildNav.class,"name");
xstream.useAttributeFor(ChildNav.class,"url");
xstream.useAttributeFor(Nav.class,"name");
//父节点nav对应Nav类,childNav节点对应ChildNav类,有多个childNav节点,这里需转换到集合中
//没有这句的话会报错误Causedby: //com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$DuplicateFieldException: //DuplicatefieldchildNav
xstream.addImplicitCollection(ChildNav.class,"childNav");
//将一个xml转成java对象
PermissionsObj=(Permissions)xstream.fromXML(reader);//deserializefromXML

//对xml的package包进行别名映射
xstream.aliasPackage("my.company","com.thoughtworks");

XStream提供了Converter,使我们在object<->xml时,能对一些输入输出参数进行类型转换。

认的情况下,XStream在做转换时,会将整个object转成xml,也会将整个xml转成对象。
对于个别字段或者xml域,可能我们不想做转换,就可以使用omitField 。
xStream.omitField(Person.class,"lastname");
(不会吧Person类里面的属性lastname 解析到xml)

认情况下,XStream不会自动扫描这种Annotations
stream.processAnnotations(RendezvousMessage.class);(需要加上这句去扫描RendezvousMessage.class里面的注释)

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念