资讯专栏INFORMATION COLUMN

使用XStream实现Java对象与XML互相转换

崔晓明 / 1350人阅读

摘要:简介是一个对象与互相转换的工具类库。官网链接简单使用下载页面使用构建项目的加入以下依赖创建对象转使用方法。创建解析对象设置别名默认会输出全路径转为转换后的文本为转对象使用方法。

XStream简介

XStream是一个Java对象与XML互相转换的工具类库。

官网链接: http://x-stream.github.io/index.html

简单使用

下载页面:http://x-stream.github.io/download.html

使用Maven构建项目的加入以下依赖:


    com.thoughtworks.xstream
    xstream
    1.4.10

创建Bean

public class User {

    private String userName;

    private String email;

    public User() {}

     public User(String userName, String email) {
        this.userName = userName;
        this.email = email;
    }

    public String toString() {
        return "User:{userName=" + this.userName + ",email=" + this.email + "}";
    }

    //Getter and Setter...
}
Java对象转XML:

使用xStream.toXML()方法。

public static void main(String[] args) {
    
    User user = new User("lanweihong", "lwhhhp@gmail.com");
    
    //创建解析XML对象
    XStream xStream = new XStream();
    //设置别名, 默认会输出全路径
    xStream.alias("User", User.class);
    //转为xml
    String xml = xStream.toXML(user);
    System.out.println(xml);
}

转换后的xml文本为:


  lanweihong
  lwhhhp@gmail.com
XMLJava对象

使用xStream.fromXML()方法。

public static void main(String[] args) {
    XStream xStream = new XStream();
    xStream.alias("User", User.class);
    String xml = "
" +
            "  lanweihong
" +
            "  lwhhhp@gmail.com
" +
            "";
    //转对象
    User user = (User)xStream.fromXML(xml);
    System.out.println(user.toString());
}

输出文本为:

User:{userName=lanweihong,email=lwhhhp@gmail.com}
使用注解

最基本的注解@XStreamAlias用于设置字段别名;我们将上述例子创建的User对象添加注解改造一下:

@XStreamAlias("user")
public class User {

    @XStreamAlias("username")
    private String userName;

    @XStreamAlias("email")
    
    private String email;

    public User() {}

     public User(String userName, String email) {
        this.userName = userName;
        this.email = email;
    }

    public String toString() {
        return "User:{userName=" + this.userName + ",email=" + this.email + "}";
    }

    //Getter and Setter...
}

XStream默认不会读取这个注解,因为,我们需要声明XStream的注解来源:

public static void main(String[] args) {
    User user = new User("lanweihong", "lwhhhp@gmail.com");
    XStream xStream = new XStream();
    //声明XStream注解来源
    xStream.processAnnotations(User.class);
    String xml = xStream.toXML(user);
    System.out.println(xml);
}

输出文本为:


  lanweihong
  lwhhhp@gmail.com

由此可见,生成的xml节点名称已经变为我们使用@XStreamAlias注解的别名。

简单封装为工具类
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class XmlUtils {

    /**
     * XML转对象
     * @param clazz 对象类
     * @param str xml字符串
     * @param  T
     * @return
     */
    public static  T parseFromXml(Class clazz, String xml) {
        //创建解析XML对象
        XStream xStream = new XStream(new DomDriver());
        //处理注解
        xStream.processAnnotations(clazz);
        @SuppressWarnings("unchecked")
        //将XML字符串转为bean对象
        T t = (T)xStream.fromXML(xml);
        return t;
    }

    /**
     * 对象转xml
     * @param obj 对象
     * @return
     */
    public static String toXml(Object obj) {
        XStream xStream = new XStream(new DomDriver());
        xStream.processAnnotations(obj.getClass());
        return xStream.toXML(obj);
    }

}

原文地址:https://www.lwhweb.com/2017/11/21/xstream-1/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70803.html

相关文章

  • XStream自定义XML转换

    摘要:跟进解析的源码,没找到加载的地方,时间紧迫,也没时间去仔细阅读文档,于是干脆自己动手重写了一个简单的从到的转换器。自定义直接实现这个接口,方法返回,直接接手整个的解析工作。 莫名其妙的异常 昨天做一个项目时用到了XStream来做XML到Bean的转换器,需要转换的Bean格式如下: @Data @XStreamAlias(Document) public class AccountT...

    Nosee 评论0 收藏0
  • XStream自定义XML转换

    摘要:跟进解析的源码,没找到加载的地方,时间紧迫,也没时间去仔细阅读文档,于是干脆自己动手重写了一个简单的从到的转换器。自定义直接实现这个接口,方法返回,直接接手整个的解析工作。 莫名其妙的异常 昨天做一个项目时用到了XStream来做XML到Bean的转换器,需要转换的Bean格式如下: @Data @XStreamAlias(Document) public class AccountT...

    Little_XM 评论0 收藏0
  • Ofbiz使用的一些库

    摘要:解析检测文本编码与对象的互相转化表达式语言富邮件组件从等来源中提取结构化内容远程调用规则匹配框架安全 xercesimpl 解析xml icu4j 检测文本编码 xstream xmljson与java对象的互相转化 juel java表达式语言 ical4j 富邮件 axis2 webservice组件 tika 从htmlpdf等来源中提取结构化内容 xm...

    Leck1e 评论0 收藏0
  • 2016年度最受欢迎的100个 Java

    摘要:最受欢迎的个库连续两年,二度成为中最受欢迎的库。此外,谷歌的开源项目来势汹汹,勇夺第三名,该库包含了一系列谷歌内含的核心库。在本次最受欢迎的个库中,个库与相关。 【编者按】本文作者为 Henn Idan,主要介绍基于 GitHub 中的数据分析,得出的2016年度最受欢迎的100个 Java 库。本文系国内 ITOM 管理平台 OneAPM 编译呈现。 谁拔得头筹?谁又落于人后?我们分...

    nihao 评论0 收藏0
  • java版微信公众号开发(二):配置token

    摘要:扫码登陆微信公众号平台,此时默认的是编辑模式,需要修改为开发者模式。若确认此次请求来自微信服务器,请原样返回参数内容,则接入生效,成为开发者成功,否则接入失败。 扫码登陆微信公众号平台,此时默认的是编辑模式,需要修改为开发者模式。 找到开发--->基本配置, showImg(https://segmentfault.com/img/bVbdTk2?w=323&h=786); showI...

    URLOS 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<