使用XStream,XMLSerializer 解析及格式转换
2023-04-18 14:04:17 时间
博主原创,转载请注明出处
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());
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击