xml解析 运用递归解析多层xml文件

先观察xml文件内容格式找出相同的地方提出来,然后先判断再递归,话不多说,上代码:

   /***
     *  读取格式2 xml文件内容
     */
    public static List<WorkParamDto> readTypeTwoXml(String path){
        ArrayList<WorkParamDto> result = new ArrayList<>();
        SAXReader reader = new SAXReader();
        //获取xml路径
        Document document = null;
        WorkParamDto workParamDto = new WorkParamDto();
        try {
            File file = ResourceUtils.getFile("classpath:"+path);
            document = reader.read(file);
            //获取根目录
            Element rootElement = document.getRootElement();
            Element element = rootElement.element("模型性能参数信息");
            //获取树形结构
            Element elementArae = element.element("参数域");//第一层参数域
            workParamDto.setName(elementArae.attributeValue("名称"));
            workParamDto.setSize(elementArae.attributeValue("粒度"));
            workParamDto.setNote(elementArae.attributeValue("描述"));
            result.add(readTwoXml(workParamDto,elementArae));
        } catch (DocumentException e) {
           throw new BizException("xml格式2文件内容读取失败");
        } catch (FileNotFoundException e) {
            throw new BizException("文件未找到!");
        }
        return result;
    }

    public static WorkParamDto readTwoXml(WorkParamDto workParamDto,Element elementArae){
        if (CollUtil.isNotEmpty(elementArae.elementIterator())){
        List<Element> elements = elementArae.elements("参数项");
        ArrayList<ParamItemDto> list = new ArrayList<>();
        for (Element e : elements) {
            ParamItemDto paramItemDto = new ParamItemDto();
            paramItemDto.setName(e.attributeValue("名称"));
            paramItemDto.setValue(e.element("参数项值").attributeValue("数值"));
            paramItemDto.setType(e.attributeValue("数据类型"));
            paramItemDto.setMaxValue(e.attributeValue("最大值"));
            paramItemDto.setMinValue(e.attributeValue("最小值"));
            paramItemDto.setUnit(e.attributeValue("单位"));
            paramItemDto.setSize(e.attributeValue("粒度"));
            list.add(paramItemDto);
        }
        workParamDto.setParamList(list);
        }
        return workParamDto;
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值