java解析XML文件

mac2025-08-29  9

话不多说直接上干货:

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,"社保信息入库成功"); }

好了目前为止就总结完了,很简单的一个小例子

最新回复(0)