加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用XStream转换xml

发布时间:2020-12-15 22:39:45 所属栏目:百科 来源:网络整理
导读:java 利用Xstream生成和解析xml,知识结构: 1.Xstream简介; 使用限制 : JDK版本不能1.5. 虽然预处理注解是安全的,但自动侦查注解可能发生竞争条件. 特点: 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要set

java 利用Xstream生成和解析xml,知识结构:
1.Xstream简介;

使用限制: JDK版本不能<1.5.
虽然预处理注解是安全的,但自动侦查注解可能发生竞争条件.

特点:
简化的API;
无映射文件;
高性能,低内存占用;
整洁的XML;
不需要修改对象;支持内部私有字段,不需要setter/getter方法,final字段;非公有类,内部类;类不需要默认构造器,完全对象图支持.维护对象引用计数,循环引用. i
提供序列化接口;
自定义转换类型策略;
详细的错误诊断;
快速输出格式;当前支持 JSON 和 morphing.

使用场景Transport 转换
Persistence 持久化对象
Configuration 配置
Unit Tests 单元测


maven依赖:

<dependency>
        <groupId>com.thoughtworks.xstream</groupId>
        <artifactId>xstream</artifactId>
        <version>1.4.3</version>
</dependency>

隐式集合
当我们使用集合类时不想显示集合,只显示里面的元素即可.
使用隐式集合前:

<list> 
  <element /> 
  <element /> 
 <list> 
 

使用隐式集合: 
 xstream.addImplicitCollection(Person.class,"list"); 
 
使用隐式集合后: 
  <element /> 
  <element />  

2.Xstream注解常用知识:
@XStreamAlias("message") 别名注解
作用目标: 类,字段
@XStreamImplicit 隐式集合
@XStreamImplicit(itemFieldName="part")
作用目标: 集合字段
@XStreamConverter(SingleValueCalendarConverter.class) 注入转换器
作用目标: 对象
@XStreamAsAttribute 转换成属性
作用目标: 字段
@XStreamOmitField 忽略字段
作用目标: 字段
Auto-detect Annotations 自动侦查注解
xstream.autodetectAnnotations(true);
自动侦查注解与XStream.processAnnotations(Class[] cls)的区别在于性能.自动侦查注解将缓存所有类的类型.
3.案例分析: (1)同一标签下多个同名元素;

(2)同一标签下循环多个对象;


    /**
     * 将传入xml文本转换成Java对象,添加转换器
     * @param xmlStr
     * @param cls
     * @param converter
     * @param <T>
     * @return
     */
    public static <T> T  toBean(String xmlStr,Class<T> cls,Converter converter){
        //注意:不是new Xstream(); 否则报错:java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserFactory
        XStream xstream=new XStream(new DomDriver());
        xstream.registerConverter(converter);
//		XStream xstream = new XStream(
//				new DomDriver("UTF-8",new XmlFriendlyNameCoder("-_","_")));
        xstream.processAnnotations(cls);
        T obj=(T)xstream.fromXML(xmlStr);
        return obj;
    }


详细见:

http://www.oschina.net/code/snippet_116183_14202

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读