900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > DOM4J解析xml文件 递归遍历全部子节点

DOM4J解析xml文件 递归遍历全部子节点

时间:2019-08-07 17:37:23

相关推荐

DOM4J解析xml文件 递归遍历全部子节点

业务需求是把图中的xml解析为如下格式的进行前端展示

ps:解析后用一个map来装,注意map的value是子节点名称,并不是节点值!!!

map中的key为: 根节点名,用“-”符号间隔, value为: 子节点名

下面是service层代码

使用了递归的方式来遍历子节点。

如果value是想获取节点内容的话,把getname改为gettext即可。

public class MetaDataConfigServiceImpl implements MetaDataConfigService {List<Map<String, Object>> elemList = new ArrayList<>();/*** 解析XML文件* @param file* @return*/@Overridepublic List<Map<String, Object>> xmlAnalysis(MultipartFile file) {// 文件信息校验String fileName = file.getOriginalFilename();if (!StringUtils.endsWith(fileName, StrConstant.XML_EXT)) {MessageException.throwMsg(fileName + " 的文件格式错误,只能是" + StrConstant.XML_EXT + "格式");}if (file.getSize() == 0) {MessageException.throwMsg("文件内为空(0kb)!");}Document document = null;try {//创建解析器对象SAXReader saxReader = new SAXReader();//读取输入流 得到文档对象document = saxReader.read(file.getInputStream());} catch (Exception e) {log.error("解析失败:{}", e.getMessage());MessageException.throwMsg("解析XML文件失败!");}//通过Document对象获取根元素Element elem = document.getRootElement();getElementList(elem);List<Map<String, Object>> xmlList = elemList.stream().distinct().collect(Collectors.toList());return xmlList;}/*** 递归遍历子节点** @param element*/public void getElementList(Element element) {List<Element> elements = element.elements();if (elements.size() == 0) {//没有子元素Map<String, Object> map = new HashMap<>(16);String xpath = element.getPath();String value = element.getName();String replace = xpath.substring(1, xpath.lastIndexOf("/")).replace("/", "-");map.put(replace, value);elemList.add(map);} else {//有子元素for (Element element1 : elements) {getElementList(element1);}}}}

controller层代码

@PostMapping("/xml/analysis")@ApiOperation(value = "解析xml文件", notes = "map中的key为: 根节点信息, value为: 子节点信息")public ResultDTO<List<Map<String,Object>>> xmlAnalysis(@RequestParam(value = "file") MultipartFile file) {List<Map<String, Object>> analysis = metaDataConfigService.xmlAnalysis(file);return ResultDTO.data(analysis);}

打印结果

{归档文件信息-基本信息=立档单位统一社会信用代码}{归档文件信息-基本信息=立档单位名称}{归档文件信息-基本信息=密级}{归档文件信息-基本信息=市场主体名称}{归档文件信息-基本信息=市场主体统一社会信用代码}{归档文件信息-基本信息=注册码}{归档文件信息-基本信息=登记类型}{归档文件信息-基本信息=法定代表人}{归档文件信息-基本信息=法人证件类型}{归档文件信息-基本信息=法人证件号}{归档文件信息-基本信息=核准日期}{归档文件信息-基本信息=通知书名称}{归档文件信息-基本信息=通知书文号}{归档文件信息-基本信息=发放日期}{归档文件信息-基本信息=归档人}{归档文件信息-基本信息=归档日期}{归档文件信息-办理流程信息=环节名称}{归档文件信息-办理流程信息=责任处科室}{归档文件信息-办理流程信息=经办人}{归档文件信息-办理流程信息=意见类型}{归档文件信息-办理流程信息=意见内容}{归档文件信息-办理流程信息=办理时间}{归档文件信息-办理流程信息-aa=bb}{归档文件信息-办理流程信息-aa=cc}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。