话不多说直接上干货:
1、原文件处理:
针对我的任务,人客户直接丢给我的原文件形式(简直真的是太可恶了)
1)原形式
"[\"<?xml version=\\\"1.0\\\" encoding=\\\"GBK\\\"?><p><s sfzhm=\\\"370321198806073013\\\" /><s dwmc=\\\"淄博市人防指挥中心\\\" /><s _lesb__errcode_=\\\"0\\\" /><s cjgzrq=\\\"20130801\\\" /><s dwbh=\\\"0300962152\\\" /><s hkxz=\\\"非农业户口\\\" /><s xm=\\\"付博\\\" /><s errflag=\\\"0\\\" /><s sbjbjgbh=\\\"37030103\\\" /><s shbzkh=\\\"C67752298\\\" /><s dyxsksny=\\\"\\\" /><s zglb=\\\"在职人员\\\" /><s rysczt=\\\"正常\\\" /><s lxdh=\\\"`k\\\" /><s typelistfords_cbxx=\\\"xzbz:s,xzbzmc:s,qsny:s\\\" /><s blzyrq=\\\"20131119\\\" /><s shbzhm=\\\"370321198806073013\\\" /><s errtext=\\\"\\\" /><d k=\\\"ds_cbxx\\\" ><r xzbzmc=\\\"机关事业养老\\\" xzbz=\\\"102\\\" qsny=\\\"201410\\\" /><r xzbzmc=\\\"津贴补贴\\\" xzbz=\\\"106\\\" qsny=\\\"`k\\\" /><r xzbzmc=\\\"职业年金\\\" xzbz=\\\"108\\\" qsny=\\\"201410\\\" /><r xzbzmc=\\\"改革前养老\\\" xzbz=\\\"109\\\" qsny=\\\"201308\\\" /><r xzbzmc=\\\"失业\\\" xzbz=\\\"201\\\" qsny=\\\"201308\\\" /><r xzbzmc=\\\"职工医疗\\\" xzbz=\\\"301\\\" qsny=\\\"201308\\\" /><r xzbzmc=\\\"公务员\\\" xzbz=\\\"302\\\" qsny=\\\"201308\\\" /><r xzbzmc=\\\"大额\\\" xzbz=\\\"303\\\" qsny=\\\"201308\\\" /><r xzbzmc=\\\"护理保险\\\" xzbz=\\\"309\\\" qsny=\\\"201801\\\" /><r xzbzmc=\\\"工伤\\\" xzbz=\\\"401\\\" qsny=\\\"201308\\\" /></d></p>\"]"
2)处理
使用正则处理一下
@GetMapping("/zbsb")
@ApiOperation(value = "根据身份证号码查询对应社保信息")
public ResponseResult getSbMsg(@RequestParam( value = "sfzhm",defaultValue = "2") String sfzhm) {
String url = sbUrl + "&sfzhm=" + sfzhm;
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.get()
.url(url)
.build();
Call call;
try{
call = okHttpClient.newCall(request);
Response response = call.execute();
String responseText = response.body().string();
logger.debug("--------社保信息 : " + responseText);
if(CommonTool.isNull(responseText) && ! responseText.equals("[\"\"]")){
responseText = responseText.substring(2,responseText.length()-2).replaceAll("\\\\n","").replaceAll("\\\\","");
return jwZbSbCaseService.insetZbSbMsg(responseText);
}
return ResponseResult.fail();
}catch(IOException e){
logger.debug("--------社保接口调用失败 : " + e.getMessage());
return ResponseResult.fail();
}
}
3)处理完成之后的形式
<?xml version="1.0" encoding="GBK"?>
<p>
<s sfzhm="370321198806073013" />
<s dwmc="淄博市人防指挥中心" />
<s _lesb__errcode_="0" />
<s cjgzrq="20130801" />
<s dwbh="0300962152" />
<s hkxz="非农业户口" />
<s xm="付博" />
<s errflag="0" />
<s sbjbjgbh="37030103" />
<s shbzkh="C67752298" />
<s dyxsksny="" />
<s zglb="在职人员" />
<s rysczt="正常" />
<s lxdh="`k" />
<s typelistfords_cbxx="xzbz:s,xzbzmc:s,qsny:s" />
<s blzyrq="20131119" />
<s shbzhm="370321198806073013" />
<s errtext="" />
<d k="ds_cbxx" >
<r xzbzmc="机关事业养老" xzbz="102" qsny="201410" />
<r xzbzmc="津贴补贴" xzbz="106" qsny="`k" />
<r xzbzmc="职业年金" xzbz="108" qsny="201410" />
<r xzbzmc="改革前养老" xzbz="109" qsny="201308" />
<r xzbzmc="失业" xzbz="201" qsny="201308" />
<r xzbzmc="职工医疗" xzbz="301" qsny="201308" />
<r xzbzmc="公务员" xzbz="302" qsny="201308" />
<r xzbzmc="大额" xzbz="303" qsny="201308" />
<r xzbzmc="护理保险" xzbz="309" qsny="201801" />
<r xzbzmc="工伤" xzbz="401" qsny="201308" />
</d>
</p>
4)开始分析xml
根节点是<p>,只要抓住这个小妖精的头其他的理解起来就很容易了
public ResponseResult insetZbSbMsg(String sbMsg){
try {
Document document = DocumentHelper.parseText(sbMsg);
Element rootstore = document.getRootElement();
Iterator iter = rootstore.elementIterator("s"); // 获取根节点下的子节点s
JwZbCbSbCase jwZbCbSbCase;
Map sbMap = new HashMap();;
// 遍历s节点
while (iter.hasNext()) {
Element itemEle = (Element) iter.next();
List<Attribute> attributes = itemEle.attributes();
for(Attribute attribute : attributes){
sbMap.put(attribute.getName(),attribute.getValue());
}
}
jwZbCbSbCase = CommonTool.map2Bean(sbMap,JwZbCbSbCase.class);
jwZbCbSbCase.setPid(UUIDUtil.uuid());
jwZbCbSbCase.setCrtTime(CommonTool.time());
jwZbCbSbCaseMapper.insertSelective(jwZbCbSbCase);
} catch (DocumentException e) {
logger.debug("--------社保信息入库失败 " + e.getMessage());
return ResponseResult.fail();
}
logger.debug("--------社保信息入库成功");
return new ResponseResult(1,null,"社保信息入库成功");
}
好了目前为止就总结完了,很简单的一个小例子