使用XStream,XMLSerializer 解析及格式转换
博主原创,转载请注明出处
1.引入对应的maven依赖:
<!--xstream-->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.9</version>
</dependency>
2.解析示例:
如下xml:
1. <?xml version="1.0" encoding="utf-8"?>
2. <MbfService xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3. <input1>
4. <MbfHeader>
5. <ServiceCode>SyncSystemInfoMgmt</ServiceCode>
6. <Operation>syncSystemInfo</Operation>
7. <AppCode>ITSM</AppCode>
8. <UId>1d9ea071-889d-4f5a-8518-3dc9f77eaa01</UId>
9. <AuthId/>
10. </MbfHeader>
11. <MbfBody>
12. <systemInfo>
13. <action>A</action>
14. <systemNum>SYS0008001</systemNum>
15. <systemFcname>下载测试</systemFcname>
16. <systemFename>dadf</systemFename>
17. <systemFcenter>技术管理办公室</systemFcenter>
18. <systemScenter>总经办</systemScenter>
24. <systemDes>ITP新增应用系统</systemDes>
35. </systemInfo>
36. </MbfBody>
37. </input1>
38. </MbfService>
使用 @XStreamAlias 注解将xml解析为对应的实体类,解析转换对应java实体类为:
import lombok.Getter;
import lombok.Setter; @Setter
@Getter
@XStreamAlias("MbfService")
public class SyncSystemInfoData { private String version = "1.0.0"; @XStreamAlias("input1")
private MbfService input1; @Setter
@Getter
public static class MbfService { @XStreamAlias("MbfHeader")
private MbfHeader MbfHeader; @XStreamAlias("MbfBody")
private MbfBody MbfBody; } @Setter
@Getter
public static class MbfHeader { @XStreamAlias("ServiceCode")
private String ServiceCode; @XStreamAlias("Operation")
private String Operation; @XStreamAlias("AppCode")
private String AppCode; @XStreamAlias("UId")
private String UId; @XStreamAlias("AuthId")
private String AuthId;
} @Setter
@Getter
public static class MbfBody { @XStreamAlias("systemInfo")
private GroupInfo systemInfo;
} @Setter
@Getter
public static class GroupInfo { @XStreamAlias("action")
private String action; @XStreamAlias("systemNum")
private String systemNum; @XStreamAlias("systemFcname")
private String systemFcname; } }
第三步转换:
String txt= "示例xml";
XStreamEx xStream = new XStreamEx(); xStream.processAnnotations(SyncSystemInfoData.class);
SyncSystemInfoData data = (SyncSystemInfoData) xStream.fromXML(txt);
示例2:当xml中具有列表属性,即某个标签会有多个。
<?xml version="1.0" encoding="UTF-8"?>
<domain-list>
<domain-summary>
<domain-id>171190</domain-id>
<domain-name>a.example.com</domain-name>
<service-type>web</service-type>
<status>Deployed</status>
<enabled>true</enabled>
<cdn-service-status>true</cdn-service-status>
</domain-summary>
<domain-summary>
<domain-id>172260</domain-id>
<domain-name>b.example.com</domain-name>
<service-type>web</service-type>
<status>Deployed</status>
<enabled>true</enabled>
<cdn-service-status>true</cdn-service-status>
</domain-summary>
</domain-list>
2.使用
@XStreamImplicit,:: XStreamImplicit注解有两个属性:itemFieldName是指当前集合数据转换为xml元素时的 elementName;keyFieldName在集合元素为复杂对象时,会使用集合元素的成员变量名作为元素的elementName,当集合元素为 基本数据类型及String类型时,keyFieldName指定的值将作为元素的elementName。
@XStreamAlias
解析对应的java实体类:
@XStreamAlias("domain-list")
@Setter
@Getter
public class DomainList { /** 域名summary列表 **/
@XStreamImplicit(itemFieldName = "domain-summary")
private List<DomainSummary> domainSummaryLst;
}
@Getter
@Setter
public class DomainSummary { /** 域名ID **/
@XStreamAlias("domain-id")
private String domainId; /** 域名 **/
@XStreamAlias("domain-name")
private String domainName; /** 类型 **/
@XStreamAlias("service-type")
private String serviceType; /** cname **/
@XStreamAlias("cname")
private String cname; /** 状态 **/
@XStreamAlias("status")
private String status; /** CDN服务器状态 **/
@XStreamAlias("cdn-service-status")
private String cdnServiceStatus; /** 禁用启用 **/
@XStreamAlias("enabled")
private String enabled;
}
进行转换:
// 定义并封装查询参数
XStream xStream = new XStream(new DomDriver());
xStream.processAnnotations(DomainList.class);
WsDomainList domainList = (DomainList) xStream.fromXML(示例中的xml);
将java bean转换为xml。
DomainList domain = new DomainList();
XStream xStream = new XStream();
// 通过注解方式的,一定要有这句话
xStream.processAnnotations(domainConf.getClass());
String xmlCfg = xStream.toXML(wsDomainConf);
使用XMLSerializer进行解析:
import net.sf.json.JSON;
import net.sf.json.xml.XMLSerializer;
import com.alibaba.fastjson.JSONObject; XMLSerializer xmlSerializer = new XMLSerializer();
JSON resutStr = xmlSerializer.read("");
JSONObject domainJson = JSONObject.parseObject(resutStr.toString());
使用XStream,XMLSerializer 解析及格式转换的更多相关文章
- 解析json格式数据
实现目标 读取文件中的json格式数据,一行为一条json格式数据.进行解析封装成实体类. 通过google的Gson对象解析json格式数据 我现在解析的json格式数据为: {",&qu ...
- json格式转换成Map的应用
jsp 1.引用json.js(将json格式转换成字符串) 2. var name = document.getElementById("name").value; var re ...
- java使用ffmpeg和mencoder做视频格式转换
首发:个人博客,持续更新和纠错 主要使用技术:1)FFmpeg,用于主流格式之间的转换,例如AVI,MP4,FLV等.2)MEncoder,用于奇葩格式转主流格式,例如RMVB转AVI.这样我们可以把 ...
- java视频格式转换代码
http://blog.163.com/zzf_fly/blog/static/20958915820127217443816/ package com.gkzx.online.action; imp ...
- ffmpeg视频格式转换(Java)
命令: 高品质: ffmpeg -i E:\input\a.wmv -ab 128 -acodec libmp3lame -ac 1 -ar 22050 -r 29.97 -qscale 4 -y E ...
- pandas 时间格式转换
OUTLINE 常见的时间字符串与timestamp之间的转换 日期与timestamp之间的转换 常见的时间字符串与timestamp之间的转换 这里说的字符串不是一般意义上的字符串,是指在读取日期 ...
- ffplay源码分析5-图像格式转换
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10311376.html ffplay是FFmpeg工程自带的简单播放器,使用FFmpeg ...
- 使用GSON和泛型解析约定格式的JSON串(转)
时间紧张,先记一笔,后续优化与完善. 解决的问题: 使用GSON和泛型解析约定格式的JSON串. 背景介绍: 1.使用GSON来进行JSON串与java代码的互相转换. 2.JSON的格式如下三种: ...
- json格式转换(json,csjon)(天气预报)
json格式数据默认为string,可以使用eval()函数或者json模块将其转换为dict.标准Json字符串必须使用双引号(")而不能使用单引号('),否则从字符串转换成dict类型会 ...
- 使用google的GSON解析json格式的数据
GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...
随机推荐
- 基于一维卷积神经网络模型的AI量化智能选股策略
这是早前BigQuant专题研究:基于卷积神经网络CNN的深度学习因子选股模型.卷积神经网络(Convolutional Neural Network, CNN),是计算机视觉研究和应用领域中最具影响 ...
- 如何使用libgdx做游戏01---libgdx的安装
一般来说使用这个工具做游戏的都是java开发者,这种技术在国外勉强算是必学的,而在国内却很少有这方面的知识. 接下来,我将讲解如何安装libgdx,也算是简单的libgdx入门 工具:idea.jdk ...
- 数字孪生和VR结合能够为自身带来怎样的改变?
随着科技的不断发展,数字孪生和虚拟现实(VR)这两个前沿技术正在逐渐融合,为各行各业带来了前所未有的改变. 数字孪生技术本身已经可以高度还原现实世界,而VR技术则能通过头戴式设备,让用户沉浸在这个虚拟 ...
- Sql整理
1:数据库 数据库是以某种有组织的方式存储的数据集合. 保存有组织数据的容器,通常是一个文件或者一组文件. SQL 是Structured Query Language (结构化查询语言)的缩写. 2 ...
- DEDECMS 后台系统用户授权目录更改为无限级(默认为二级授权)
在做一个学校的项目,分类有四级分类,总共一百多个分类,因为每个分类对应不同的老师,用于上传资料作为考核,但是添加系统用户的时候发现DEDECMS只有两级分类,所以修改啦一些代码,目前不知道是否修改完全 ...
- Pikachu漏洞靶场 Unsafe Filedownload(不安全的文件下载)
不安全的文件下载 概述 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载代码,将该文 ...
- Python中numpy出现has no attribute '_no_nep50_warning'错误的一个解决方案
本文介绍在Python中,numpy库出现报错module 'numpy' has no attribute '_no_nep50_warning'的解决方法. 一次,在运行一个Python代 ...
- Java 8升级Java 11,升级必知要点!竟然有这些坑…
随着技术的不断进步,Java作为一种广泛使用的编程语言,其版本更新带来了许多新特性和性能提升.从Java 8升级到Java 11,是一个重要的转变,它不仅带来了新的编程范式,还引入了对现代软件开发的多 ...
- Cesium中用到的图形技术——Computing the horizon occlusion point
译者注:本文翻译自Cesium官方博文<Computing the horizon occlusion point>,by KEVIN RING. 你厌倦了地平线剔除吗? 太好了,我也没有 ...
- 如何花“一点点小钱”突破华为云CCE服务的“防线”
摘要:有没有方法绕开CCE的限制,自由的调用K8s的API呢?有还便宜,2.4元/集群/天. 申明:所有的一切都是为了使得华为云可以更好,而不是为了diss它. 通过华为云购买多个K8s集群,又想使用 ...