本文为博主原创,未经允许不得转载:

  xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛,

  在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法:

一. 使用XMLSerializer 将xml转为json格式

  1.引入jar包:

<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<classifier>jdk15</classifier>
</dependency>

  使用示例:

public static void main(String[] args) {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+"<domain xmlns:cloudcdn=\"http://cloud.chinanetcenter.com/extension/xhtml\">"
+ "<domain-id>fdg68</domain-id>"
+ "<domain-name>dfsg.com</domain-name>"
+ "<service-type>web-https</service-type>"
+ "<service-areas/>"
+ "<cname>fdsgsdg.com</cname>"
+ "<status>Deployed</status>"
+ "<comment/>"
+ "</domain>"
;
XMLSerializer cacheXmlSerializer = new XMLSerializer();
JSON referJsonResult = cacheXmlSerializer.read(xml);
JSONObject referJson = JSONObject.parseObject(referJsonResult.toString());
System.out.println(referJson);
     //运行打印的结果为:
//{"domain-name":"dfsg.com","domain-id":"fdg68","service-type":"web-https","cname":"fdsgsdg.com","@xmlns:cloudcdn":"http://cloud.chinanetcenter.com/extension/xhtml","comment":[],"service-areas":[],"status":"Deployed"}
}

二.通过XStream将xml转化为实体类,

  通过第一种方式也可以将xml解析为实体类,步骤为,先将xml转为json,然后将json转为实体类,

  这里介绍的方式是通过XStream将xml转为实体类:

    XStream是个很强大的工具,能将java对象和xml之间相互转化。xstream不在意java类中成员变量是私有还是公有,

  也不在乎是否有默认构造函数。它调用方式也非常简单:从xml对象转化为java对象,使用fromXML()方法;

  从java对象序列化为xml,toXML()即可,很方便。

  xstream也支持注解方式,注解方式实现和非注解方式实现的区别在于是否单独解析别名,

    如果是注解的方式,可以直接使用注解的属性将xml字段与实体类字段进行映射。

  具体可参考:https://blog.csdn.net/dc282614966/article/details/80970750

  此处展示注解式转换的实例:

  @XStreamAlias("message") 别名注解 ,作用就是将属性按照别名输出。

@XStreamAlias("User")
public class User { @XStreamAlias("name")
private String name;
@XStreamAlias("age")
private String age;
@XStreamAlias("SEX")
private String sex;
public User(String name, String age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}

1.xml转换实体类的实现方式:

public static void main(String[] args) {
String xml="<User>\n"
+" <name>peter</name> \n"
+" <age>13</age> \n"
+" <SEX>男</SEX> \n"
+" </User>";
XStreamEx xStream = new XStreamEx();
xStream.processAnnotations(User.class);
User user = (User) xStream.fromXML(xml);
}

2.将实体类转xml的方式

     User user = new User();
user.setName("test");
// 转换
XStream xStream = new XStream();
// 通过注解方式的,一定要有这句话
xStream.processAnnotations(user.getClass());
String xmlCfg = xStream.toXML(user);

xml转json和实体类的两种方式的更多相关文章

  1. Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)

    实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...

  2. python_106_创建类的两种方式

    class Foo(object): def __init__(self, name): self.name = name f = Foo("alex") print(type(f ...

  3. mybatis 热部署xml文件(spring boot和springmvc两种方式)

    参考:http://thinkgem.iteye.com/blog/2304557 步骤:1.创建两个java类 (1)MapperRefresh.java   :用于刷新mapper (2)SqlS ...

  4. webserver代理生成本地类的两种方式

    方式1,把webservers地址请求出来的xml拷贝出来放到文本里面后缀改成wsdl文件在VS里面使用下列命令 C:\Program Files (x86)\Microsoft SDKs\Windo ...

  5. Dynamics CRM2013/2015 检索实体属性的两种方式

    昨天有朋友问起如何查询一个字段属性是否存在于某个实体中,一般这个问题我们会采取最直观的查询方式即MetadataBrowser,该工具是一个zip解决方案包在SDK中的如下目录内"\SDK\ ...

  6. Java解析Json数据的两种方式

    JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据. 使用以上两种方式解析json ...

  7. C#复杂XML反序列化为实体对象两种方式

    前言 今天主要讲的是如何把通过接口获取到的Xml数据转换成(反序列化)我们想要的实体对象,当然Xml反序列化和Json反序列化的方式基本上都是大同小异.都是我们事先定义好对应的对应的Xml实体模型,不 ...

  8. Java中将xml文件转化为json的两种方式

    原文地址https://blog.csdn.net/a532672728/article/details/76312475 最近有个需求,要将xml转json之后存储在redis中,找来找去发现整体来 ...

  9. Visual Studio 2015 将json转换为实体类

    最新写的一个接口需要接收json参数,然后序列化为实体类然后再进行后面的逻辑处理.因为json中键值对比较多,逐一去手写实体中的每个属性太麻烦,于是寻思是否有这样的工具可以将json转换为实体类. 经 ...

随机推荐

  1. Windows下使用TeamViewer连接远程服务器,以及解决“远程桌面关闭后TeamViewer不能连接”的问题

    1.本地安装TeamViewer,完成后如下: 2.远程服务器也安装TeamViewer 在本地TeamViewer中得伙伴ID,输入远程的ID,弹出如下对话框,输入密码即可. 3.这时虽然可以连接, ...

  2. linux怎么查看进程启动,用户的工作目录,pwdx,/proc/11256/cwd

    linux 通过pid 寻找程序路径的最简单命令(pwdx)  #pwdx  pid号1  [pid2] .... 在linux实际操作命令中,查看pid的方式有很多种,通过pid找程序路径的方式也有 ...

  3. python基础之 装饰器,内置函数

    1.闭包回顾 在学习装饰器之前,可以先复习一下什么是闭包? 在嵌套函数内部的函数可以使用外部变量(非全局变量)叫做闭包! def wrapper(): money =10 def inner(num) ...

  4. 【技巧】-NO.123.数据处理技巧

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  5. 2018-2019-2 网络对抗技术 20165321 Exp6 信息搜集与漏洞扫描

    1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应用 百度查找IP地址: 查了一下kali的IP地址 https://fofa.so/的使用: 查询了一 ...

  6. FB面经Prepare: Email User

    有一些账号,账号里面有一个或多个email, 如果两个账号有共同的email,则认为这两个账号是同一个人,找出哪些账号是同一个人 输入是这样的:数字是用户,字母是邮箱,有很多人有多个邮箱,找出相同的用 ...

  7. 爬虫 -----爬取百度时事热点和url

    使用scrapy top.py    爬虫主要工作 pipelines.py    数据保存 main.py   执行脚本 items.py   初始化item

  8. Flask性能优化对比

    基于Flask的网关:Flask,Uwsgi,Gevent,Gunicorn(gevent),Tornado,Twisted !/usr/bin/python -- coding:utf-8 -- 美 ...

  9. 蓝桥杯近3年初赛题之三(17年b组)

    1. 标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是 ...

  10. 在嵌入式开发中应该这样理解嵌入式C编程

    一.新手常常问的一个问题:C语言和嵌入式C编程有什么区别?而嵌入式工程师一般都会告诉你,其区别在于嵌入式的C语言是跑在嵌入式的开发板上的,CPU和电脑不一样,所以编译器也是不一样的,生成的可执行程序也 ...