java解析XML文件

话不多说直接上干货:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值