使用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 ...
随机推荐
- Cesium被接入数字孪生系统后会发生怎样的改变?
众所周知,Cesium凭借其开源免费的特点一直垄断着整个三维GIS的生态系统,但是随着数字孪生技术的发展以及各项新需求的不断涌现,Cesium与数字孪生系统相结合的潜力也逐渐凸显. 一般而言,Cesi ...
- jclasslib的安装
双击安装包打开后点击下一步,然后选择安装的路径. 默认路径,如果c盘有空间不建议更改路径,然后再次点击下一步 依然选择下一步 最后点击完成即可完成安装.现在可以使用啦 注:如果需要安装包,请点击下面链 ...
- ElasticSearch之Force merge API
使用本方法,可以触发强制合并操作. 默认情况下,ElasticSearch会在后台周期性触发合并操作,因此不需要用户刻意使用本方法. 使用强制合并的弊端: 可能会产生大于5G的segment对象,而E ...
- 技巧:在Excel或Word中将回车替换掉
一.在Excel中替换 将回车替换为逗号或其他字符,如下面的屏幕截图所示. 1. 在 查找和替换 对话框中 查找内容 字段,请按 Ctrl + J 键,然后在 更换 字段中,键入所需的字符,在这种情况 ...
- JavaFx之场景交互(二十一)
JavaFx之场景交互(二十一) 有parent.son两个父子窗口,父窗口可以操作子窗口,父子可以相互调用对方的对象,下面我给出两种方案,我推荐使用第二种 一.构造传参 参数比较多的话代码不优雅.而 ...
- 如何上传你的组件到npm
前言 以react为例子 webpack作为打包工具 准备工作 安装node npm上注册账号 https://www.npmjs.com/ 创建要上传组件 新建项目 生成package.json文件 ...
- C# 查找PDF页面指定区域中的文本并替换和高亮
对PDF文档中的内容进行查找时,可针对文档全篇内容获取查找结果,也可在PDF指定页面中的特定范围内(矩形框区域)进行查找,对获取的查找结果可执行文本高亮或替换等操作,本文将对此作相关介绍(附VB.NE ...
- DTT第7期直播回顾 | 低代码应用构建流程和适用场景,与你想的一样吗?
摘要:本期直播主题是<揭秘华为云低代码技术微认证>,向开发者们讲述低代码的发展历程,介绍华为低代码平台应用魔方AppCube的开发能力,解读华为低代码的认证和学习体系 本期直播详解 本期直 ...
- 【有奖征文】WEB前端大作战,走在技术最前端!
摘要:投稿分享你在前端领域的积累,秀出你的技术"肌肉",为自己,也为技术发声. 近几年大家对于WEB前端的关注度很高, 比如整体势头发展良好,各种技术百花齐放,人才稀缺, 随着互联 ...
- 网页“悼念模式”全站变灰/黑白色CSS代码
<style> html { filter:grayscale(100%); -webkit-filter:grayscale(100%); -moz-filter:grayscale(1 ...