快捷搜索:  汽车  科技

java将字符串转为map(JavaXML转换为Map)

java将字符串转为map(JavaXML转换为Map)XML解析Map(方法二)详细代码:

XML解析为Map,相同的节点会被覆盖,只保留最后一次解析的值(方法一)


java将字符串转为map(JavaXML转换为Map)(1)

XML解析Map(方法一)

详细代码:

/*** * xml解析为map,相同的节点会被覆盖,只保留最后一次解析的值 * @param xml * @return */ public static Map<String Object> xmlToMap(String xml) { if (StringUtils.isBlank(xml)) return null; Document doc = null; try { doc = DocumentHelper.parseText(xml); } catch (DocumentException e) { e.printStackTrace(); } Map<String Object> map = new HashMap<>(); if (null == doc) { return map; } // 获取根元素 Element rootElement = doc.getRootElement(); elementToMap(map rootElement); return map; } /*** * 相同节点会被覆盖,只保存最后一个节点的值。 * elementToMap核心方法,递归调用 * @param element 节点元素 * @param outmap 用于存储xml数据的map */ private static void elementToMap(Map<String Object> outmap Element element) { // 得到根元素下的子元素列表 List<Element> list = element.elements(); int size = list.size(); if (size == 0) { // 如果没有子元素 则将其存储进map中 outmap.put(element.getName() element.getTextTrim()); } else { // innermap用于存储子元素的属性名和属性值 Map<String Object> innermap = new HashMap<>(); // 遍历子元素 list.forEach(childElement -> elementToMap(innermap childElement)); outmap.put(element.getName() innermap); } }


XML解析为Map 相同节点同样被解析出来(方法二)


java将字符串转为map(JavaXML转换为Map)(2)

XML解析Map(方法二)

详细代码:

/*** * xml格式字符串转换为map 相同节点同样被解析出来 * @param xml xml字符串 * @return 第一个为Root节点,Root节点之后为Root的元素,如果为多层,可以通过key获取下一层Map */ public static Map<String Object> dom4jXmlToMap(String xml) { if (StringUtils.isBlank(xml)) return null; Document doc = null; try { doc = DocumentHelper.parseText(xml); } catch (DocumentException e) { e.printStackTrace(); } Map<String Object> map = new HashMap<>(); if (null == doc) { return map; } // 获取根元素 Element rootElement = doc.getRootElement(); dom4jElementToMap(map rootElement); return map; } /*** * 相同节点会全部解析出来。 * 使用递归调用将多层级xml转为map * @param map * @param rootElement */ private static void dom4jElementToMap(Map<String Object> map Element rootElement) { //获得当前节点的子节点 List<Element> elements = rootElement.elements(); if (elements.size() == 0) { //没有子节点说明当前节点是叶子节点,直接取值 map.put(rootElement.getName() rootElement.getText()); } else if (elements.size() == 1) { //只有一个子节点说明不用考虑list的情况,继续递归 Map<String Object> tempMap = new HashMap(); dom4jElementToMap(tempMap elements.get(0)); map.put(rootElement.getName() tempMap); } else { //多个子节点的话就要考虑list的情况了,特别是当多个子节点有名称相同的字段时 Map<String Object> tempMap = new HashMap(); for (Element element : elements) { tempMap.put(element.getName() null); } Set<String> keySet = tempMap.keySet(); for (String string : keySet) { namespace namespace = elements.get(0).getNamespace(); List<Element> sameElements = rootElement.elements(new QName(string namespace)); //如果同名的数目大于1则表示要构建list if (sameElements.size() > 1) { List<Map> list = new ArrayList(); for (Element element : sameElements) { Map<String Object> sameTempMap = new HashMap(); dom4jElementToMap(sameTempMap element); list.add(sameTempMap); } map.put(string list); } else { //同名的数量不大于1直接递归 Map<String Object> sameTempMap = new HashMap(); dom4jElementToMap(sameTempMap sameElements.get(0)); map.put(string sameTempMap); } } } }

猜您喜欢: