博主原创,转载请注明出处

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 解析及格式转换的更多相关文章

  1. 解析json格式数据

    实现目标 读取文件中的json格式数据,一行为一条json格式数据.进行解析封装成实体类. 通过google的Gson对象解析json格式数据 我现在解析的json格式数据为: {",&qu ...

  2. json格式转换成Map的应用

    jsp 1.引用json.js(将json格式转换成字符串) 2. var name = document.getElementById("name").value; var re ...

  3. java使用ffmpeg和mencoder做视频格式转换

    首发:个人博客,持续更新和纠错 主要使用技术:1)FFmpeg,用于主流格式之间的转换,例如AVI,MP4,FLV等.2)MEncoder,用于奇葩格式转主流格式,例如RMVB转AVI.这样我们可以把 ...

  4. java视频格式转换代码

    http://blog.163.com/zzf_fly/blog/static/20958915820127217443816/ package com.gkzx.online.action; imp ...

  5. ffmpeg视频格式转换(Java)

    命令: 高品质: ffmpeg -i E:\input\a.wmv -ab 128 -acodec libmp3lame -ac 1 -ar 22050 -r 29.97 -qscale 4 -y E ...

  6. pandas 时间格式转换

    OUTLINE 常见的时间字符串与timestamp之间的转换 日期与timestamp之间的转换 常见的时间字符串与timestamp之间的转换 这里说的字符串不是一般意义上的字符串,是指在读取日期 ...

  7. ffplay源码分析5-图像格式转换

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10311376.html ffplay是FFmpeg工程自带的简单播放器,使用FFmpeg ...

  8. 使用GSON和泛型解析约定格式的JSON串(转)

    时间紧张,先记一笔,后续优化与完善. 解决的问题: 使用GSON和泛型解析约定格式的JSON串. 背景介绍: 1.使用GSON来进行JSON串与java代码的互相转换. 2.JSON的格式如下三种: ...

  9. json格式转换(json,csjon)(天气预报)

    json格式数据默认为string,可以使用eval()函数或者json模块将其转换为dict.标准Json字符串必须使用双引号(")而不能使用单引号('),否则从字符串转换成dict类型会 ...

  10. 使用google的GSON解析json格式的数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

随机推荐

  1. Android对接微信登录记录

    Android对接微信登录记录 - Stars-One的杂货小窝 Android项目要对接下微信登录,稍微记录下踩坑点 代码 1.添加依赖 implementation 'com.tencent.mm ...

  2. Asp.net core Webapi 如何执行定时任务?

    前言 在计算机系统中,定时执行一些后台任务是很常见的场景,比如定时发送邮件.备份数据等等. 那么,.NET 技术如何通过编程灵活地实现项目里复杂的自定义任务呢? 如果是 Windows 生态,通常来说 ...

  3. python tkinter使用(十一)

    python tkinter使用(十一) 本篇文章主要讲下tkinter 窗口的一些属性,以及实现无法关闭的窗口中遇到的一些问题. #!/usr/bin/python3 # -*- coding: U ...

  4. 【Datahub系列教程】Datahub入门必学——DatahubCLI之Docker命令详解

    大家好,我是独孤风,今天的元数据管理平台Datahub的系列教程,我们来聊一下Datahub CLI.也就是Datahub的客户端. 我们在安装和使用Datahub 的过程中遇到了很多问题. 如何安装 ...

  5. 如何用 vscode 捞出还未国际化的中文词条

    做国际化一个很头疼的坑就是,你不知道项目里到底还有哪些中文词条没有国际化处理 纯靠人工去检查不现实,也不靠谱,而且浪费资源 所以还是得通过脚本工具来检查,思路是: 先保存好本地代码变更,准备好一个无文 ...

  6. CUDA个人入坟笔记

    CUDA是建立在NVIDIA的GPUs上的一个通用并行计算平台和编程模型,基于CUDA编程可以利用GPUs的并行计算引擎来更加高效地解决比较复杂的计算难题.近年来,GPU最成功的一个应用就是深度学习领 ...

  7. 国内AI大模型 VS chatgpt (20)-- H265/H264有何不同,h265有什么优势?

    H265/H264有何不同,h265有什么优势? 文心一言: H.264和H.265是两种不同的视频编码标准,它们在压缩质量和带宽需求方面有所不同. H.264是一种高效的视频压缩标准,它的编码单位是 ...

  8. NebulaGraph实战:2-NebulaGraph手工和Python操作

      图数据库是专门存储庞大的图形网络并从中检索信息的数据库.它可以将图中的数据高效存储为点(Vertex)和边(Edge),还可以将属性(Property)附加到点和边上.本文以示例数据集basket ...

  9. LeetCode 二分查找篇(69、33、704)

    69. x 的平方根 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: ...

  10. 细说SQL与ETL之间的小秘密

    本文分享自华为云社区<GaussDB数据库SQL系列-SQL与ETL浅谈>,作者:Gauss松鼠会小助手2. 一.前言 在SQL语言中,ETL(抽取.转换和加载)是一种用于将数据从源系统抽 ...