先观察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;
}