dom4j 通用解析器,解析成List<Map<String,Object>>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | import java.io.InputStream; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Dom4JXmlConvert { /** * dom4j解析xml * * @param in * @return */ @SuppressWarnings ( "unchecked" ) public static List<Map<String, Object>> convert(InputStream in) { long start = System.currentTimeMillis(); List<Map<String, Object>> lst = new LinkedList<>(); SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read(in); // 获取根节点 Element root = document.getRootElement(); // 迭代根节点下的所有子节点 Iterator<Element> itertor = root.elementIterator(); Element eleNext = null ; // 遍历子节点 while (itertor.hasNext()) { eleNext = itertor.next(); Map<String, Object> tmp = parseElement(eleNext); lst.add(tmp); } System.out.println( "本次解析XML耗时:" + (System.currentTimeMillis() - start)); } catch (DocumentException e) { e.printStackTrace(); } return lst; } @SuppressWarnings ({ "unchecked" }) private static Map<String, Object> parseElement(Element ele) { Map<String, Object> map = new LinkedHashMap<String, Object>(); // 遍历节点属性 Iterator<Attribute> iterAttr = ele.attributeIterator(); // 遍历时的中间遍量 Attribute attr = null ; // 遍历 while (iterAttr.hasNext()) { attr = iterAttr.next(); map.put(attr.getQName().getName(), attr.getValue()); } // 如果该节点没有子节点,则添加标签名和标签中间的字符到map,如果还有子节点,递归遍历 Iterator<Element> itertor = ele.elementIterator(); if (!itertor.hasNext()) { map.put(ele.getName(), ele.getStringValue()); } else { List<Map<String, Object>> lst = new LinkedList<>(); while (itertor.hasNext()) { lst.add(parseElement(itertor.next())); } map.put(ele.getName(), lst); } return map; } } |
测试解析spring的配置文件,自定义文件,均可正常解析
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步