使用XStream,XMLSerializer 解析及格式转换

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 使用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());

 

标签: java

目录
相关文章
|
7月前
|
存储 传感器 编解码
图像格式:常见图像格式RAW, RGB, YUV&&图像格式的解析、格式转换和看图软件
图像格式:常见图像格式RAW, RGB, YUV&&图像格式的解析、格式转换和看图软件
1370 1
|
XML Java 数据格式
Spring boot xstream解析UnknownFieldException异常
Spring boot xstream解析UnknownFieldException异常
331 0
|
XML Android开发 数据格式
Android XStream 解析xml数据变成bean,支持CDATA
参考 1、Android 用 XStream 将复杂xml解析为javabean 2、XStream支持CDATA标签 3、Retrofit 用Soap协议访问WebService 详解 实例 留着上一篇retrofit访问webservice后,...
1821 0
|
XML Android开发 数据格式
android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件
  简介 XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换。 将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件。   1、下载工具 xstream   下载最新版本地址: https://nexus.
1607 0
|
XML Android开发 数据格式
android XMl 解析神奇xstream 二: 把对象转换成xml
前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件   1、Javabeen 代码 package com.
1298 0
|
XML Android开发 数据格式
android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml android XMl 解析神奇xstream 三: 把复杂对象转换成 xml   1、文件准备 把一个预先写好的xml文件放在android项目目录的 asset 文件夹。
1204 0
|
XML Android开发 数据格式
android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml android XMl 解析神奇xstream 三:...
1512 0
|
XML Android开发 数据格式
android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml android XMl 解析神奇xstream 三:...
1351 0
|
23天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
60 2
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
72 0

推荐镜像

更多