使用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 ...
随机推荐
- MySQL账号锁定与解锁
MySQL提供了多种方法来锁定解锁账号,下面是几种常用的方法: 1.使用ALTER语句锁定账号 锁定账号: ALTER USER 'username'@'localhost' ACCOUNT LOCK ...
- GoFrame Goland插件
前言 GoFrame 是一款模块化.高性能.企业级的 Go 基础开发框架.GoFrame 是一款通用性的基础开发框架,是 Golang 标准库的一个增强扩展级,包含通用核心的基础开发组件,优点是实战化 ...
- C++ Qt开发:Charts折线图绘制详解
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QCharts ...
- Roaring bitmaps
Roaring bitmaps 最近看一篇文章,里面涉及到使用roaring bitmaps来推送用户广告并通过计算交集来降低用户广告推送次数.本文给出roaring bitmaps的原理和基本用法, ...
- 数字孪生融合GIS系统将为交通领域带来什么改变?
随着科技的不断发展,数字孪生和GIS技术正成为交通领域的新宠.数字孪生是指通过数学建模.数据采集和实时仿真等技术手段,将实体世界与数字世界相互关联,形成一个全新的虚拟系统.而GIS(地理信息系统)则是 ...
- 自定义开发odoo14的统计在线用户人数
在 Odoo 14 中统计在线人数通常涉及到定制开发或者使用特定的模块. 自定义开发:如果没有现成的模块,您可能需要进行一些自定义开发.这通常涉及到扩展Odoo的用户模型,以跟踪用户的登录和登出活动. ...
- 在WInform开发中实现工具栏/菜单的动态呈现
在Winform系统开发中,为了对系统的工具栏/菜单进行动态的控制,我们对系统的工具栏/菜单进行动态配置,这样可以把系统的功能弹性发挥到极致.通过动态工具栏/菜单的配置方式,我们可以很容易的为系统新增 ...
- 原生JavaScript 与 jQuery 执行Ajax请求
原生JavaScript和jQuery都可以用来执行Ajax请求,以下是它们的基本实现方式的比较: 原生JavaScript实现Ajax请求: var xhr = new XMLHttpRequest ...
- CSS 基础 1 - Block & Inline
CSS 基础 1 - Block & Inline display: inline/block/inline-block/none/flex/grid; block block 元素独占一行, ...
- 华为云分布式云原生UCS,助力MetaERP构建企业级高可用分布式业务
本文分享自华为云社区<华为云分布式云原生UCS,助力MetaERP构建企业级高可用分布式业务>,作者:云容器大未来. 引言 华为云最近成为<Forrester Wave: Multi ...