今天我们要探讨的一个问题是,如何将xml格式的字符串转换成对象,以及对象转换成xml字符串。

简介

现如今,虽然数据的传输大部分都是用json格式来进行传输,但是xml毕竟也会有一些老的项目在进行使用,身为一个万能的程序员。我们又怎能不会使用它呢?正常的老式方法是通过获取节点来进行一系列操作,个人感觉太过于复杂、繁琐。今天推荐一套简单的api。XStream类。好了废话不多说,直接上代码。(为了讲述的更加清晰。我们全程不使用任何注解,只调用api来达到效果。在理解了原理的情况下看下注解的语法即会使用)

对象转xml

首先我们从简单的对象转xml为例来进行讲解,因为xml转对象会相对复杂,我们由浅到深。

第一步:导入jar包,本人项目以gradle搭建。jar包下载引用如下(普通项目从网上找一下jar包放到lib文件夹下即可)

compile(“com.thoughtworks.xstream:xstream:1.4.10”)

第二步:创建对象(创建User与Customer,不要被名字误导。。。没什么关系)

1.创建User对象(使用lombok创建getset方法,不了解的同学直接手动创建即可)

package com.kingboy.springboot.domain.dto;import lombok.Data;import java.util.List;/*** Created by beyondLi on 2017/6/14.*/
@Data
public class User {private String name;private Integer age;private List<Customer> customer;
}

2.创建Customer对象(同上)

package com.kingboy.springboot.domain.dto;import lombok.Data;/*** Created by beyondLi on 2017/6/14.*/
@Data
public class Customer {private String commodity;
}

第三步:测试类

        //创建user对象与customer对象并赋值User user = new User();Customer customer1 = new Customer();Customer customer2 = new Customer();customer1.setCommodity("商品1");customer2.setCommodity("商品2");List<Customer> list = new ArrayList<>();list.add(customer1);list.add(customer2);user.setName("beyondLi");user.setAge(23);user.setCustomer(list);//创建xStream对象XStream xStream = new XStream();//调用toXML 将对象转成字符串String s = xStream.toXML(user);System.out.println(s);

第四步:输出结果

第五步:优化

上述我们看到了结果,但是貌似和我们想要的不太一样呀,怎么有些是全路径名称呢?这里解决方法很简单。主要讲思路。因为关系到xml转对象时候封装是否报错的问题。默认情况下当对象没有名字的时候,例如最一开始的对象 以及对象中的集合类型中泛型的类型,这些我们都没办法给他起名字的,默认情况下它是全路径名称。所以如果我们不处理,当xml转对象的时候传来的xml直接都是名字,而我们如果直接调用api封装就会出现因为名字不一致所以封装失败而报错的问题。所以我们要给全路径名称的类起别名(注!最好不要无脑性的给所有对象都起别名,虽然也可以解决问题。但是我们最好理解透彻,只给有需要的类起别名),代码如下

        //创建user对象与customer对象并赋值User user = new User();Customer customer1 = new Customer();Customer customer2 = new Customer();customer1.setCommodity("商品1");customer2.setCommodity("商品2");List<Customer> list = new ArrayList<>();list.add(customer1);list.add(customer2);user.setName("beyondLi");user.setAge(23);user.setCustomer(list);//创建xStream对象XStream xStream = new XStream();//给指定类起别名xStream.alias("User",User.class);xStream.alias("Customer",Customer.class);//调用toXML 将对象转成字符串String s = xStream.toXML(user);System.out.println(s);

结果:

希望阅读到这里的同学将上面那个起别名理解清楚,什么时候起别名,什么时候不需要起别名,这样才能在xml转对象的时候不出现任何的偏差和错误。

XML转对象

第一步:导入jar包。同上

第二步:创建User与Customer对象。同上

第三部 : 测试类

首先我们展示一下上面提示的不起别名报错问题,我模拟了一个xml类型的字符串,但是不起别名

        //模拟一个xml格式字符串String xml = "<user>\n" +"  <name>beyondLi</name>\n" +"  <age>23</age>\n" +"  <customer>\n" +"    <Customer>\n" +"      <commodity>商品1</commodity>\n" +"    </Customer>\n" +"    <Customer>\n" +"      <commodity>商品2</commodity>\n" +"    </Customer>\n" +"  </customer>\n" +"</user>";//创建xStream对象XStream xstream = new XStream();//起别名,先不写,让其报错User user2 = (User) xstream.fromXML(xml);System.out.println(user2);

结果

和明显,虽然我们对象user和customer起名字都没有错误。但是报错说找不到。这个报错结合上面的对象转xml的结果。我们就可以明显的看出问题出在了哪里。

正确代码如下

        //模拟一个xml格式字符串String xml = "<user>\n" +"  <name>beyondLi</name>\n" +"  <age>23</age>\n" +"  <customer>\n" +"    <Customer>\n" +"      <commodity>商品1</commodity>\n" +"    </Customer>\n" +"    <Customer>\n" +"      <commodity>商品2</commodity>\n" +"    </Customer>\n" +"  </customer>\n" +"</user>";//创建xStream对象XStream xstream = new XStream();//将别名与xml名字相对应xstream.alias("user", User.class);xstream.alias("Customer", Customer.class);User user2 = (User) xstream.fromXML(xml);System.out.println(user2);

结果:

转换成功

其实xml与对象之间的相互转换并没有难度,但是经常出错和不成功其实就是因为在别名上的问题。而导致无法匹配。希望这篇文当可以帮助更多的同学解决问题。

以上观点仅是个人理解。如有错误或不完善,还望指出,共同成长

java关于对象(javabean)与xml之间的相互转换相关推荐

  1. java 嵌套对象转xml_Gson对Java嵌套对象和JSON字符串之间的转换 | 学步园

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识, ...

  2. JAVA Bean和XML之间的相互转换 - XStream简单入门

    JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...

  3. JAXB JavaBean与Xml之间转换

    JAXB JavaBean与Xml之间转换问题之二 接着上一篇来说,上一篇主要讲述的是关于jaxb将实体转换为xml的使用方法和注解的一些过程,但是凡事都会有缺点,而上述方法的缺点就是marshall ...

  4. java 判断对象是否是xml格式_java对象与xml格式之间的转换

    java对象是可以直接与xml相互转换的,但需要导入包:xstream-1.3.1.jar,在创建对象的时候,注意一定要new一个DomDriver: 成功的测试代码如下: package com.x ...

  5. java xmap_转:使用XMAP完成JavaBean和XML之间转换

    XML和Java Bean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦.下面介绍如何进行XML和Java Bean的互相转换. 最近项目中用到了xml和java bea ...

  6. java xmap_使用XMAP完成JavaBean和XML之间转换

    XML和Java Bean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦.下面介绍如何进行XML和Java Bean的互相转换. 最近项目中用到了xml和java bea ...

  7. Java实现Excel和Office Open XML之间的相互转换

    前言 Office Open XML(也被称为OOXML)是一种压缩的.基于XML的Excel.Word和演示文档格式.有时,你可能需要将Excel文件转换为Office Open XML,以使其在各 ...

  8. JSON对象和JSON 字符串之间的相互转换

    功能上是一样的,都是将JSON字符串(str)转换成JSON对象 jsonobject .注意str一定得是以键值对存在的JSON字符串. JSON.parseObject(String text, ...

  9. Java中,集合与数组之间的相互转换

    1. 集合转换为类型一致的数组 使用集合转数组的方法,必须使用集合的 toArray(T[] array)方法,传入的是类型完全一致.长度为 0 的空数组. 反例: 直接使用 toArray 无参方法 ...

最新文章

  1. spark为什么比hive速度快?
  2. java中的==和equals
  3. TIME_CHECK_PLAUSIBILITY
  4. OpenGL shader uniform的实例
  5. mysql optimization
  6. 深度学习-tensorflow1.x:平均值(reduce_mean)与求和(reduce_sum) 小白理解 代码实现 Tensorflow1.x 和 Numpy
  7. 彻底卸载MYSQL,windows版
  8. 无法发送具有此谓词类型的内容正文_采用多模态细化类型进行程序合成
  9. SQL SERVER 2008筛选时报错 无法为该请求检索数据
  10. Java简易开发环境搭建
  11. linux ftp指定下载文件名称,linux中通过FTP下载指定的文件方法linux网页制作 -电脑资料...
  12. html中ip输入格式正则表达式,通过正则表达式验证IP和端口格式的正确性
  13. 计算机组装与维护doc,《计算机组装与维护》课程教案.doc
  14. matlab 伽马校正曲线,【图像处理知识复习】02伽马校正matlab,C++实现
  15. 自监督学习(一):基于 Pretext Task
  16. NumPy库回顾与分享(一)
  17. Downkyi(哔哩下载姬)绿色便携版V1.4.0 | bilibili视频下载工具 \ B站解析器 -- b站视频怎么下载到电脑?
  18. fileList.slice(-3)的意思
  19. uview tabs切换让item始终居中
  20. 程序设计语言中的 一等公民,二等公民,三等公民

热门文章

  1. Winpcap数据包的抓取及还原
  2. 汽车融资租赁公司如何实现业务流程化管理和强大风控管理
  3. 打造生产数据闭环,提高质量管控能力
  4. python opencv去除简易水印——去除红色效果最好
  5. js---大风车呀转悠悠
  6. yii2 Syntax error or access violation: 1071 Specified key was too long Syntax error or access violat
  7. 用户“缩水”致股价下跌,Facebook能迈入万亿俱乐部吗?
  8. 你的家庭财务安全规划做了吗
  9. mysql集群session_PHP集群session共享
  10. 万能自动点击器连点器,连击器的作用解析