Xml 转实体类对象
步骤:
1. 读取Xml 数据转换成一个json数据;
2. 把json数据转成实体类对象;
maven依赖:
dom4j
dom4j
1.6.1
commons-io
commons-io
2.6
com.alibaba
fastjson
1.2.23
工具类:
package com.liantuo.international.utils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.liantuo.international.domain.Response;
import org.dom4j.*;
import java.util.List;
import static org.springframework.util.StringUtils.isEmpty;
/**
* @author
* @Description
* @date 2019/8/20
*/
public class Xml2JsonUtil {
/**
* xml转json
* @param element
* @param json
*/
public static void dom4j2Json(Element element,JSONObject json){
//如果是属性
for(Object o:element.attributes()){
Attribute attr=(Attribute)o;
if(!isEmpty(attr.getValue())){
json.put("@"+attr.getName(), attr.getValue());
}
}
List chdEl=element.elements();
//如果没有子元素,只有一个值
if(chdEl.isEmpty()&&!isEmpty(element.getText())){
json.put(element.getName(), element.getText());
}
//有子元素
for(Element e:chdEl){
//子元素也有子元素
if(!e.elements().isEmpty()){
JSONObject chdjson=new JSONObject();
dom4j2Json(e,chdjson);
Object o=json.get(e.getName());
if(o!=null){
JSONArray jsona=null;
//如果此元素已存在,则转为jsonArray
if(o instanceof JSONObject){
JSONObject jsono=(JSONObject)o;
json.remove(e.getName());
jsona=new JSONArray();
jsona.add(jsono);
jsona.add(chdjson);
}
if(o instanceof JSONArray){
jsona=(JSONArray)o;
jsona.add(chdjson);
}
json.put(e.getName(), jsona);
}else{
if(!chdjson.isEmpty()){
json.put(e.getName(), chdjson);
}
}
}else{
//子元素没有子元素
for(Object o:element.attributes()){
Attribute attr=(Attribute)o;
if(!isEmpty(attr.getValue())){
json.put("@"+attr.getName(), attr.getValue());
}
}
if(!e.getText().isEmpty()){
json.put(e.getName(), e.getText());
}
}
}
}
}
实体类:
H3ads实体类:
package com.liantuo.international.domain;
/**
* @author lidada
* @Description
* @date 2019/8/20
*/
public class H3ads {
private String h3ad;
public H3ads() {
}
public H3ads(String h3ad) {
this.h3ad = h3ad;
}
public void setH3ad(String h3ad) {
this.h3ad = h3ad;
}
public String getH3ad() {
return h3ad;
}
}
OTA_AVE_RS实体类:
package com.liantuo.international.domain;
/**
* @author lidada
* @Description
* @date 2019/8/20
*/
public class OTA_AVE_RS {
private Response Response;
public Response getResponse() {
return Response;
}
public void setResponse(Response response) {
Response = response;
}
}
Out1实体类:
package com.liantuo.international.domain;
import com.alibaba.fastjson.annotation.JSONField;
/**
* @author lidada
* @Description
* @date 2019/8/20
*/
public class Out1 {
@JSONField(format = "yyyy-MM-dd")
private String dt;
private String week;
private String dep;
private String arr;
private String depcity;
private String arrcity;
private String filter;
private Segs segs;
private H3ads h3ads;
public Out1() {
}
public Out1(String dt, String week, String dep, String arr, String depcity, String arrcity, String filter, Segs segs, H3ads h3ads) {
this.dt = dt;
this.week = week;
this.dep = dep;
this.arr = arr;
this.depcity = depcity;
this.arrcity = arrcity;
this.filter = filter;
this.segs = segs;
this.h3ads = h3ads;
}
public String getDt() {
return dt;
}
public void setDt(String dt) {
this.dt = dt;
}
public String getWeek() {
return week;
}
public void setWeek(String week) {
this.week = week;
}
public String getDep() {
return dep;
}
public void setDep(String dep) {
this.dep = dep;
}
public String getArr() {
return arr;
}
public void setArr(String arr) {
this.arr = arr;
}
public String getDepcity() {
return depcity;
}
public void setDepcity(String depcity) {
this.depcity = depcity;
}
public String getArrcity() {
return arrcity;
}
public void setArrcity(String arrcity) {
this.arrcity = arrcity;
}
public String getFilter() {
return filter;
}
public void setFilter(String filter) {
this.filter = filter;
}
public Segs getSegs() {
return segs;
}
public void setSegs(Segs segs) {
this.segs = segs;
}
public H3ads getH3ads() {
return h3ads;
}
public void setH3ads(H3ads h3ads) {
this.h3ads = h3ads;
}
}
Response实体类:
package com.liantuo.international.domain;
/**
* @author lidada
* @Description
* @date 2019/8/20
*/
public class Response {
private String ID;
private String StName;
private String SN;
private String Flag;
private Out1 out1;
public Response() {
}
public Response(String ID, String stName, String SN, String flag, Out1 out1) {
this.ID = ID;
StName = stName;
this.SN = SN;
Flag = flag;
this.out1 = out1;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getStName() {
return StName;
}
public void setStName(String stName) {
StName = stName;
}
public String getSN() {
return SN;
}
public void setSN(String SN) {
this.SN = SN;
}
public String getFlag() {
return Flag;
}
public void setFlag(String flag) {
Flag = flag;
}
public Out1 getOut1() {
return out1;
}
public void setOut1(Out1 out1) {
this.out1 = out1;
}
}
SeatAndNum实体类:
package com.liantuo.international.domain;
/**
* @author lidada
* @Description
* @date 2019/8/20
*/
public class SeatAndNum {
private String name;
private String av;
public SeatAndNum() {
}
public SeatAndNum(String name, String av) {
this.name = name;
this.av = av;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAv(String av) {
this.av = av;
}
public String getAv() {
return av;
}
}
SeatAndNums实体类:
package com.liantuo.international.domain;
import java.util.List;
/**
* @author lidada
* @Description
* @date 2019/8/20
*/
public class SeatAndNums {
private List seatAndNum;
public SeatAndNums() {
}
public SeatAndNums(List seatAndNum) {
this.seatAndNum = seatAndNum;
}
public List getSeatAndNum() {
return seatAndNum;
}
public void setSeatAndNum(List seatAndNum) {
this.seatAndNum = seatAndNum;
}
}
Seg实体类:
package com.liantuo.international.domain;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author lidada
* @Description
* @date 2019/8/20
*/
public class Seg {
private String routno;
private String subid;
private String airline;
private String fltno;
private String dep;
private String arr;
private String dt;
private String week;
private String deptm;
private String arrtm;
private String dev;
private String stop;
private String ASR;
private String meal;
private String et;
private String lnk;
private Term term;
private String flytm;
private String journeytm;
private SeatAndNums seatAndNums;
public Seg() {
}
public Seg(String routno, String subid, String airline, String fltno, String dep, String arr, String dt, String week, String deptm, String arrtm, String dev, String stop, String ASR, String meal, String et, String lnk, Term term, String flytm, String journeytm, SeatAndNums seatAndNums) {
this.routno = routno;
this.subid = subid;
this.airline = airline;
this.fltno = fltno;
this.dep = dep;
this.arr = arr;
this.dt = dt;
this.week = week;
this.deptm = deptm;
this.arrtm = arrtm;
this.dev = dev;
this.stop = stop;
this.ASR = ASR;
this.meal = meal;
this.et = et;
this.lnk = lnk;
this.term = term;
this.flytm = flytm;
this.journeytm = journeytm;
this.seatAndNums = seatAndNums;
}
public String getRoutno() {
return routno;
}
public void setRoutno(String routno) {
this.routno = routno;
}
public String getSubid() {
return subid;
}
public void setSubid(String subid) {
this.subid = subid;
}
public String getAirline() {
return airline;
}
public void setAirline(String airline) {
this.airline = airline;
}
public String getFltno() {
return fltno;
}
public void setFltno(String fltno) {
this.fltno = fltno;
}
public String getDep() {
return dep;
}
public void setDep(String dep) {
this.dep = dep;
}
public String getArr() {
return arr;
}
public void setArr(String arr) {
this.arr = arr;
}
public String getDt() {
return dt;
}
public void setDt(String dt) {
this.dt = dt;
}
public String getWeek() {
return week;
}
public void setWeek(String week) {
this.week = week;
}
public String getDeptm() {
return deptm;
}
public void setDeptm(String deptm) {
this.deptm = deptm;
}
public String getArrtm() {
return arrtm;
}
public void setArrtm(String arrtm) {
this.arrtm = arrtm;
}
public String getDev() {
return dev;
}
public void setDev(String dev) {
this.dev = dev;
}
public String getStop() {
return stop;
}
public void setStop(String stop) {
this.stop = stop;
}
public String getASR() {
return ASR;
}
public void setASR(String ASR) {
this.ASR = ASR;
}
public String getMeal() {
return meal;
}
public void setMeal(String meal) {
this.meal = meal;
}
public String getEt() {
return et;
}
public void setEt(String et) {
this.et = et;
}
public String getLnk() {
return lnk;
}
public void setLnk(String lnk) {
this.lnk = lnk;
}
public Term getTerm() {
return term;
}
public void setTerm(Term term) {
this.term = term;
}
public String getFlytm() {
return flytm;
}
public void setFlytm(String flytm) {
this.flytm = flytm;
}
public String getJourneytm() {
return journeytm;
}
public void setJourneytm(String journeytm) {
this.journeytm = journeytm;
}
public SeatAndNums getSeatAndNums() {
return seatAndNums;
}
public void setSeatAndNums(SeatAndNums seatAndNums) {
this.seatAndNums = seatAndNums;
}
}
Segs实体类:
package com.liantuo.international.domain;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
/**
* @author lidada
* @Description
* @date 2019/8/20
*/
public class Segs {
private List seg;
public Segs() {
}
public Segs(List seg) {
this.seg = seg;
}
public void setSeg(List seg) {
this.seg = seg;
}
public List getSeg() {
return seg;
}
}
Term实体类:
package com.liantuo.international.domain;
/**
* @author lidada
* @Description
* @date 2019/8/20
*/
public class Term {
private String dep;
private String arr;
public Term(String dep, String arr) {
this.dep = dep;
this.arr = arr;
}
public Term() {
}
public void setDep(String dep) {
this.dep = dep;
}
public String getDep() {
return dep;
}
public void setArr(String arr) {
this.arr = arr;
}
public String getArr() {
return arr;
}
}
测试:
package com.liantuo.international.utils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.liantuo.international.domain.Response;
import org.dom4j.*;
import java.util.List;
import static org.springframework.util.StringUtils.isEmpty;
/**
* @author
* @Description
* @date 2019/8/20
*/
public class Xml2JsonDemo {
public static void main(String[] args) throws DocumentException {
String x = "C297818 AV 0 S 10OCT19 THU BJS SHA BJS SHA VIA MU DIRECT ONLY Y 1 1 MU 5138 PEK SHA 10OCT19 THU 0700 0920 33L 0 ^ B E DS# T2 T2 2:20 2:20 J A C A D A Q A I A W A Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 15 2 1 MU 5183 PEK PVG 10OCT19 THU 0735 0950 321 0 ^ S E DS# T2 T1 2:15 2:15 J A Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 8 3 1 MU 5102 PEK SHA 10OCT19 THU 0800 1015 333 0 ^ S E DS# T2 T2 2:15 2:15 J A C A D A Q A I A Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 15 4 1 MU 5156 PEK SHA 10OCT19 THU 0830 1040 33L 0 ^ S E DS# T2 T2 2:10 2:10 J A C A D A Q A I A W A Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 15 5 1 MU 5104 PEK SHA 10OCT19 THU 0900 1115 33L 0 ^ S E DS# T2 T2 2:15 2:15 J A C A D A W A Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 15 6 1 MU 5106 PEK SHA 10OCT19 THU 1000 1215 33L 0 ^ S E DS# T2 T2 2:15 2:15 J A C A D A W A Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 15 7 1 MU 5108 PEK SHA 10OCT19 THU 1100 1320 33L 0 ^ D E DS# T2 T2 2:20 2:20 J A W A Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 15 8 1 MU 5152 PEK SHA 10OCT19 THU 1130 1400 32L 0 ^ D E DS# T2 T2 2:30 2:30 J A W A Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 6 9 1 MU 5110 PEK SHA 10OCT19 THU 1200 1420 333 0 ^ D E DS# T2 T2 2:20 2:20 J A Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 15 10 1 MU 5112 PEK SHA 10OCT19 THU 1300 1515 773 0 ^ S E DS# T2 T2 2:15 2:15 J A Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 15 11 1 MU 271 PEK PVG 10OCT19 THU 1255 1520 321 0 ^ S E DS# T2 T1 2:25 2:25 J A Y A B A INFT FLIGHT OPEN 8 12 1 * MU 8560 PEK SHA 10OCT19 THU 1305 1530 738 0 ^ L E * DS# MF 8178 T2 T2 2:25 2:25 Y A 13 1 MU 5154 PEK SHA 10OCT19 THU 1330 1540 738 0 ^ S E DS# T2 T2 2:10 2:10 Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 6 14 1 MU 5114 PEK SHA 10OCT19 THU 1400 1620 33L 0 ^ S E DS# T2 T2 2:20 2:20 J A W A Y A B A INFT FLIGHT OPEN 15 15 1 MU 5116 PEK SHA 10OCT19 THU 1500 1720 33L 0 ^ S E DS# T2 T2 2:20 2:20 J A W A Y A B A INFT FLIGHT OPEN 15 16 1 MU 5118 PEK SHA 10OCT19 THU 1600 1820 33L 0 ^ S E DS# T2 T2 2:20 2:20 J A W A Y A B A H A INFT FLIGHT OPEN 15 17 1 MU 5120 PEK SHA 10OCT19 THU 1700 1915 333 0 ^ D E DS# T2 T2 2:15 2:15 J A Y A B A INFT FLIGHT OPEN 15 18 1 MU 563 PEK PVG 10OCT19 THU 1715 1930 33L 0 ^ D E DS# T2 T1 2:15 2:15 J A W A Y A INFT FLIGHT OPEN 15 19 1 MU 5122 PEK SHA 10OCT19 THU 1800 2015 33L 0 ^ D E DS# T2 T1 2:15 2:15 J A W A Y A B A INFT FLIGHT OPEN 15 20 1 * MU 9108 PEK SHA 10OCT19 THU 1830 2050 73L 0 ^ D E * DS# FM 9108 T2 T2 2:20 2:20 J A W A Y A B A H A INFT FLIGHT OPEN 6 21 1 MU 5124 PEK SHA 10OCT19 THU 1900 2115 33L 0 ^ S E DS# T2 T2 2:15 2:15 J A W A Y A B A INFT FLIGHT OPEN 15 22 1 MU 5130 PEK PVG 10OCT19 THU 1935 2210 323 0 ^ S E DS# T2 T1 2:35 2:35 J A Y A B A H A INFT FLIGHT OPEN 8 23 1 MU 5126 PEK SHA 10OCT19 THU 2000 2215 333 0 ^ S E DS# T2 T2 2:15 2:15 J A Y A B A H A INFT FLIGHT OPEN 15 24 1 * MU 9102 PEK SHA 10OCT19 THU 2020 2250 73E 0 ^ S E * DS# FM 9102 T2 T2 2:30 2:30 Y A B A H A INFT FLIGHT OPEN 6 25 1 MU 5128 PEK SHA 10OCT19 THU 2105 2320 773 0 ^ E DS# T2 T2 2:15 2:15 F A J A Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 15 26 1 MU 5158 PEK SHA 10OCT19 THU 2130 2345 738 0 ^ E DS# T2 T2 2:15 2:15 Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 6 27 1 MU 5160 PEK SHA 10OCT19 THU 2150 2355 33L 0 ^ E DS# T2 T2 2:05 2:05 J A W A Y A B A M A E A H A K A L A N A R A INFT FLIGHT OPEN 15 28 1 MU 5390 PEK SHA 10OCT19 THU 1310 1810 325 1 ^ E DS# T2 T2 5:00 5:00 J A Y A B A M A E A H A K A INFT FLIGHT OPEN 8 KiogIEhVIEZMSUdIVCBQTEVBU0UgQ0hFQ0sgSU4gNDUgTUlOVVRFUyBCRUZPUkUgREVQQVJUVVJFIEFUIFBFSw== KiogIFNDIEZMSUdIVCBQTEVBU0UgQ0hFQ0sgSU4gNDUgTUlOVVRFUyBCRUZPUkUgREVQQVJUVVJFIEFUIFBFSyBUMw== KiogIEFsbCBzY2hlZHVsZWQgTVUgb3IgRk0gZmxpZ2h0cyBvcGVyYXRlZCBieSBNVSBvciBGTQ== ";
//读取XML标签信息
Document doc= DocumentHelper.parseText(x);
JSONObject json=new JSONObject();
//通过工具类把读取到的信息转成json数据
Xml2JsonUtil.dom4j2Json(doc.getRootElement(), json);
System.out.println(json);
String response = json.getString("Response");
//最后转换成实体类对象
Response response2 = JSONObject.parseObject(response, Response.class);
System.out.println(response2);
}
}
执行结果: