使用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 ...
随机推荐
- NetSuite 开发日记:如何管理多环境自定义列表值
在 NetSuite 中可以创建自定义列表,列表可用于为其他(自定义)记录上的下拉选项列表值. var rec = record.create({ type: 'customrecord_xx' }) ...
- postman——token传参
问题描述: 有一个登陆接口获取token,其他接口再次访问都要带上token 解决方案: 1.在登陆接口访问后设置Postman的环境变量(Environment),例如设置环境变量名:token,值 ...
- 玩转Python:数据可视化,一个很高级的交互式Python库,附代码
在数据科学和分析的世界里,将数据可视化是至关重要的一步,它能帮助我们更好地理解数据,发现潜在的模式和关系.Python 提供了多种可视化工具,HvPlot 是其中一个出色的库,专为简单且高效的交互式可 ...
- DNS解析中CNAME和MX记录冲突
转载:DNS中CNAME和MX记录的冲突 在DNS解析中,CNAME记录与其他记录往往是互斥的.最常见的是CNAME记录和MX记录的互斥.例如我们在http://example.com部署官网,通过C ...
- java获取包下所有java类
java获取包下所有java类 简单加载包下的类,注意简单编写非递归查找,自行实现递归查找即可 import java.io.File; import java.net.URL; import jav ...
- 前端系列:基于 Flex 弹性布局详解
目录 基本介绍 基本概念 父项常见属性 flex-direction justify-content flex-wrap align-items align-content flex-flow 子项常 ...
- 文心一言 VS 讯飞星火 VS chatgpt (40)-- 算法导论5.4 4题
四.一次聚会需要邀请多少人,才能让其中 3 人的生日很可能相同? 文心一言: 为了解决这个问题,我们需要先计算出所有可能的生日组合数,然后计算出其中生日相同的组合数. 已知需要邀请的人数为:23人 根 ...
- position的属性值
(fixed的父元素永远是浏览器窗口,不会根据页面滚动而改变位置:absolute的父元素是可以设置的,他会永远跟随父元素的位置的改变而改变.) 1.position: relative;相对定位 不 ...
- 痞子衡嵌入式:原来i.MXRT1170内部RAM的ECC初始化工作可全部由ROM完成
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170内部RAM的ECC初始化工作可全部由ROM完成. 痞子衡之前写了三篇文章 <M7 FlexRAM ECC> ...
- 基于Llama2模型的开源模型
2023年7月18日Meta开源了Llama2,在2万亿个Token上训练,可用于商业和研究,包括从7B到70B模型权重.预训练和微调的代码.相比Llama1,Llama2有较多提升,评估结果如下 ...