使用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());

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM