XML字符串转Map和Map转XML

前端之家收集整理的这篇文章主要介绍了XML字符串转Map和Map转XML前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

XML转Map方法一:



方法二:
  public static Map<String,String> readStringXmlOut(String xml) {
        Map<String,String> map = new HashMap<String,String>();
        Document doc = null;
        try {
            doc = DocumentHelper.parseText(xml); // 将字符串转为XML
            Element rootElt = doc.getRootElement(); // 获取根节点
            @SuppressWarnings("unchecked")
            List<Element> list = rootElt.elements();// 获取根节点下所有节点
            for (Element element : list) { // 遍历节点
                map.put(element.getName(),element.getText()); // 节点的name为map的key,text为map的value
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }

public static Map<String,String> readStringXml(String xml) throws DocumentException { Document doc = DocumentHelper.parseText(xml); Element books = doc.getRootElement(); System.out.println("rootNode:" + books.getName()); Iterator Elements = books.elementIterator(); Map<String,String> map = new HashMap<>(); while (Elements.hasNext()) { Element user = (Element) Elements.next(); System.out.println("node=" + user.getName() + "\ttext=" + user.getText()); map.put(user.getName(),user.getText()); } return map; }
/** * xml转map工具类 */ public class XmlToMapUtil { /** * xml转map 不带属性 * @param xmlStr * @param needRootKey 是否需要在返回的map里加根节点键 * @return * @throws DocumentException */ public static Map xml2map(String xmlStr,boolean needRootKey) throws DocumentException { Document doc = DocumentHelper.parseText(xmlStr); Element root = doc.getRootElement(); Map<String,Object> map = (Map<String,Object>) xml2map(root); if(root.elements().size()==0 && root.attributes().size()==0){ return map; } if(needRootKey){ //在返回的map里加根节点键(如果需要) Map<String,Object> rootMap = new HashMap<String,Object>(); rootMap.put(root.getName(),map); return rootMap; } return map; } /** * xml转map 带属性 * @param xmlStr * @param needRootKey 是否需要在返回的map里加根节点键 * @return * @throws DocumentException */ public static Map xml2mapWithAttr(String xmlStr,Object>) xml2mapWithAttr(root); if(root.elements().size()==0 && root.attributes().size()==0){ return map; //根节点只有一个文本内容  } if(needRootKey){ //在返回的map里加根节点键(如果需要) Map<String,map); return rootMap; } return map; } /** * xml转map 不带属性 * @param e * @return */ private static Map xml2map(Element e) { Map map = new LinkedHashMap(); List list = e.elements(); if (list.size() > 0) { for (int i = 0; i < list.size(); i++) { Element iter = (Element) list.get(i); List mapList = new ArrayList(); if (iter.elements().size() > 0) { Map m = xml2map(iter); if (map.get(iter.getName()) != null) { Object obj = map.get(iter.getName()); if (!(obj instanceof List)) { mapList = new ArrayList(); mapList.add(obj); mapList.add(m); } if (obj instanceof List) { mapList = (List) obj; mapList.add(m); } map.put(iter.getName(),mapList); } else map.put(iter.getName(),m); } else { if (map.get(iter.getName()) != null) { Object obj = map.get(iter.getName()); if (!(obj instanceof List)) { mapList = new ArrayList(); mapList.add(obj); mapList.add(iter.getText()); } if (obj instanceof List) { mapList = (List) obj; mapList.add(iter.getText()); } map.put(iter.getName(),iter.getText()); } } } else map.put(e.getName(),e.getText()); return map; } /** * xml转map 带属性 * @param e * @return */ private static Map xml2mapWithAttr(Element element) { Map<String,Object> map = new LinkedHashMap<String,Object>(); List<Element> list = element.elements(); List<Attribute> listAttr0 = element.attributes(); // 当前节点的所有属性的list for (Attribute attr : listAttr0) { map.put("@" + attr.getName(),attr.getValue()); } if (list.size() > 0) { for (int i = 0; i < list.size(); i++) { Element iter = list.get(i); List mapList = new ArrayList(); if (iter.elements().size() > 0) { Map m = xml2mapWithAttr(iter); if (map.get(iter.getName()) != null) { Object obj = map.get(iter.getName()); if (!(obj instanceof List)) { mapList = new ArrayList(); mapList.add(obj); mapList.add(m); } if (obj instanceof List) { mapList = (List) obj; mapList.add(m); } map.put(iter.getName(),m); } else { List<Attribute> listAttr = iter.attributes(); // 当前节点的所有属性的list Map<String,Object> attrMap = null; boolean hasAttributes = false; if (listAttr.size() > 0) { hasAttributes = true; attrMap = new LinkedHashMap<String,Object>(); for (Attribute attr : listAttr) { attrMap.put("@" + attr.getName(),attr.getValue()); } } if (map.get(iter.getName()) != null) { Object obj = map.get(iter.getName()); if (!(obj instanceof List)) { mapList = new ArrayList(); mapList.add(obj); // mapList.add(iter.getText()); if (hasAttributes) { attrMap.put("#text",iter.getText()); mapList.add(attrMap); } else { mapList.add(iter.getText()); } } if (obj instanceof List) { mapList = (List) obj; // mapList.add(iter.getText()); if (hasAttributes) { attrMap.put("#text",iter.getText()); mapList.add(attrMap); } else { mapList.add(iter.getText()); } } map.put(iter.getName(),mapList); } else { // map.put(iter.getName(),iter.getText()); if (hasAttributes) { attrMap.put("#text",iter.getText()); map.put(iter.getName(),attrMap); } else { map.put(iter.getName(),iter.getText()); } } } } } else { // 根节点的 if (listAttr0.size() > 0) { map.put("#text",element.getText()); } else { map.put(element.getName(),element.getText()); } } return map; } /** * map转xml map中没有根节点的键 * @param map * @param rootName * 

猜你在找的XML相关文章