博主原創,轉載請注明出處
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());