1.解析一段soap报文协议形如:
<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><ns1:apiEntryResponse xmlns:ns1=\"http://i.api.ei.scnczxh.iih/\"><return xmlns=\"http://i.api.ei.scnczxh.iih/\"><result><resultmsg><code>0</code><message/></resultmsg><datas><data><mzcount>2</mzcount><name_org>南充市中心医院</name_org><bservationno>--</bservationno><mzno>1900077472</mzno><diseasecode>Z34.900</diseasecode><zytotalcost>--</zytotalcost><revisit>1</revisit><code_org>1001</code_org><majordescribe>--</majordescribe><diagnose>Z34.900</diagnose><outdoctorid>01520</outdoctorid><healthcheck>--</healthcheck><hzno>001174578800</hzno><illnow>--</illnow><regisway>--</regisway><illhistory>--</illhistory><age>27岁</age><outdeptid>0101010033</outdeptid><diseasename>正常妊娠监督</diseasename><registype>--</registype><mztime>2019-11-01 08:24:14</mztime><assitcheck>--</assitcheck><disposition>--</disposition></data><data><mzcount>6</mzcount><name_org>南充市中心医院</name_org><bservationno>--</bservationno><mzno>1900077479</mzno><diseasecode>K04.500</diseasecode><zytotalcost>--</zytotalcost><revisit>1</revisit><code_org>1001</code_org><majordescribe>--</majordescribe><diagnose>K04.500</diagnose><outdoctorid>01027</outdoctorid><healthcheck>--</healthcheck><hzno>000571414200</hzno><illnow>--</illnow><regisway>--</regisway><illhistory>--</illhistory><age>77岁</age><outdeptid>0101010018</outdeptid><diseasename>慢性根尖牙周炎</diseasename><registype>--</registype><mztime>2019-11-01 08:14:05</mztime><assitcheck>--</assitcheck><disposition>--</disposition></data></datas></result></return></ns1:apiEntryResponse></soap:Body></soap:Envelope>
2.代码实现如下:
package com.wuhj.springboot;
import cn.hutool.core.bean.BeanUtil;
import com.wuhj.springboot.domain.Data;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.util.StringUtils;
import java.util.*;
public class SoapXmlParse {
public static void main(String[] args) throws DocumentException {
String soap = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><ns1:apiEntryResponse xmlns:ns1=\"http://i.api.ei.scnczxh.iih/\"><return xmlns=\"http://i.api.ei.scnczxh.iih/\"><result><resultmsg><code>0</code><message/></resultmsg><datas><data><mzcount>2</mzcount><name_org>南充市中心医院</name_org><bservationno>--</bservationno><mzno>1900077472</mzno><diseasecode>Z34.900</diseasecode><zytotalcost>--</zytotalcost><revisit>1</revisit><code_org>1001</code_org><majordescribe>--</majordescribe><diagnose>Z34.900</diagnose><outdoctorid>01520</outdoctorid><healthcheck>--</healthcheck><hzno>001174578800</hzno><illnow>--</illnow><regisway>--</regisway><illhistory>--</illhistory><age>27岁</age><outdeptid>0101010033</outdeptid><diseasename>正常妊娠监督</diseasename><registype>--</registype><mztime>2019-11-01 08:24:14</mztime><assitcheck>--</assitcheck><disposition>--</disposition></data><data><mzcount>6</mzcount><name_org>南充市中心医院</name_org><bservationno>--</bservationno><mzno>1900077479</mzno><diseasecode>K04.500</diseasecode><zytotalcost>--</zytotalcost><revisit>1</revisit><code_org>1001</code_org><majordescribe>--</majordescribe><diagnose>K04.500</diagnose><outdoctorid>01027</outdoctorid><healthcheck>--</healthcheck><hzno>000571414200</hzno><illnow>--</illnow><regisway>--</regisway><illhistory>--</illhistory><age>77岁</age><outdeptid>0101010018</outdeptid><diseasename>慢性根尖牙周炎</diseasename><registype>--</registype><mztime>2019-11-01 08:14:05</mztime><assitcheck>--</assitcheck><disposition>--</disposition></data></datas></result></return></ns1:apiEntryResponse></soap:Body></soap:Envelope>";
Map map = new HashMap();
List<Data> dataList = new ArrayList<>();
Document doc = DocumentHelper.parseText(soap);
//获取根元素,准备递归解析这个XML树
Element root = doc.getRootElement();
//获取到data的集合
List<Element> mzList = root.element("Body").element("apiEntryResponse").element("return").element("result").element("datas").elements("data");
//遍历data集合
for (Element e : mzList) {
List<Element> elements = e.elements();
//遍历将元素中的key和value存到map中
for (Element item : elements) {
if (!StringUtils.isEmpty(item.getText())) {
map.put(item.getName(), item.getText());
}
}
//将map转换成对象
Data data = BeanUtil.mapToBean(map, Data.class, true);
//对象存到集合中
dataList.add(data);
}
//最后可以将取到的数据返回及其他等等操作
}
}
3.Data对象如下:
package com.wuhj.springboot.domain;
import java.io.Serializable;
/**
* @author wuhj
* @date 2019/11/13 10:03
*/
public class Data implements Serializable {
private String mzcount;
private String name_org;
private String bservationno;
private String mzno;
private String diseasecode;
private String zytotalcost;
private String revisit;
private String code_org;
private String majordescribe;
private String diagnose;
private String outdoctorid;
private String healthcheck;
private String hzno;
private String illnow;
private String regisway;
private String illhistory;
private String age;
private String outdeptid;
private String diseasename;
private String registype;
private String mztime;
private String assitcheck;
private String disposition;
public String getMzcount() {
return mzcount;
}
public void setMzcount(String mzcount) {
this.mzcount = mzcount;
}
public String getName_org() {
return name_org;
}
public void setName_org(String name_org) {
this.name_org = name_org;
}
public String getBservationno() {
return bservationno;
}
public void setBservationno(String bservationno) {
this.bservationno = bservationno;
}
public String getMzno() {
return mzno;
}
public void setMzno(String mzno) {
this.mzno = mzno;
}
public String getDiseasecode() {
return diseasecode;
}
public void setDiseasecode(String diseasecode) {
this.diseasecode = diseasecode;
}
public String getZytotalcost() {
return zytotalcost;
}
public void setZytotalcost(String zytotalcost) {
this.zytotalcost = zytotalcost;
}
public String getRevisit() {
return revisit;
}
public void setRevisit(String revisit) {
this.revisit = revisit;
}
public String getCode_org() {
return code_org;
}
public void setCode_org(String code_org) {
this.code_org = code_org;
}
public String getMajordescribe() {
return majordescribe;
}
public void setMajordescribe(String majordescribe) {
this.majordescribe = majordescribe;
}
public String getDiagnose() {
return diagnose;
}
public void setDiagnose(String diagnose) {
this.diagnose = diagnose;
}
public String getOutdoctorid() {
return outdoctorid;
}
public void setOutdoctorid(String outdoctorid) {
this.outdoctorid = outdoctorid;
}
public String getHealthcheck() {
return healthcheck;
}
public void setHealthcheck(String healthcheck) {
this.healthcheck = healthcheck;
}
public String getHzno() {
return hzno;
}
public void setHzno(String hzno) {
this.hzno = hzno;
}
public String getIllnow() {
return illnow;
}
public void setIllnow(String illnow) {
this.illnow = illnow;
}
public String getRegisway() {
return regisway;
}
public void setRegisway(String regisway) {
this.regisway = regisway;
}
public String getIllhistory() {
return illhistory;
}
public void setIllhistory(String illhistory) {
this.illhistory = illhistory;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getOutdeptid() {
return outdeptid;
}
public void setOutdeptid(String outdeptid) {
this.outdeptid = outdeptid;
}
public String getDiseasename() {
return diseasename;
}
public void setDiseasename(String diseasename) {
this.diseasename = diseasename;
}
public String getRegistype() {
return registype;
}
public void setRegistype(String registype) {
this.registype = registype;
}
public String getMztime() {
return mztime;
}
public void setMztime(String mztime) {
this.mztime = mztime;
}
public String getAssitcheck() {
return assitcheck;
}
public void setAssitcheck(String assitcheck) {
this.assitcheck = assitcheck;
}
public String getDisposition() {
return disposition;
}
public void setDisposition(String disposition) {
this.disposition = disposition;
}
}