参考效果:xml转json
java xml转json json转xml
http://happyqing.iteye.com/blog/2316142
java xml转map
package xml2map; import java.io.File; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import net.sf.json.JSON; import net.sf.json.JSONObject; import org.apache.commons.io.FileUtils; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; /** * xml转map,map转xml 带属性 * http://happyqing.iteye.com/blog/2316275 * @author happyqing * @since 2016.8.8 */ @SuppressWarnings({ "rawtypes", "unchecked" }) public class XmlUtil { public static void main(String[] args) throws DocumentException, IOException { String textFromFile = FileUtils.readFileToString(new File("D:/workspace/workspace_3.7/xml2map/src/xml2json/sample.xml"),"UTF-8"); Mapmap = xml2map(textFromFile, false); // long begin = System.currentTimeMillis(); // for(int i=0; i<1000; i++){ // map = (Map ) xml2mapWithAttr(doc.getRootElement()); // } // System.out.println("耗时:"+(System.currentTimeMillis()-begin)); JSON json = JSONObject.fromObject(map); System.out.println(json.toString(1)); // 格式化输出 Document doc = map2xml(map, "root"); //Document doc = map2xml(map); //map中含有根节点的键 System.out.println(formatXml(doc)); } /** * 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 map = (Map ) xml2map(root); if(root.elements().size()==0 && root.attributes().size()==0){ return map; } if(needRootKey){ //在返回的map里加根节点键(如果需要) Map rootMap = new HashMap (); 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, boolean needRootKey) throws DocumentException { Document doc = DocumentHelper.parseText(xmlStr); Element root = doc.getRootElement(); Map map = (Map ) xml2mapWithAttr(root); if(root.elements().size()==0 && root.attributes().size()==0){ return map; //根节点只有一个文本内容 } if(needRootKey){ //在返回的map里加根节点键(如果需要) Map rootMap = new HashMap (); rootMap.put(root.getName(), 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(), mapList); } else 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 map = new LinkedHashMap (); List list = element.elements(); List 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(), mapList); } else map.put(iter.getName(), m); } else { List listAttr = iter.attributes(); // 当前节点的所有属性的list Map attrMap = null; boolean hasAttributes = false; if (listAttr.size() > 0) { hasAttributes = true; attrMap = new LinkedHashMap (); 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 * @throws DocumentException * @throws IOException */ public static Document map2xml(Map map, String rootName) throws DocumentException, IOException { Document doc = DocumentHelper.createDocument(); Element root = DocumentHelper.createElement(rootName); doc.add(root); map2xml(map, root); //System.out.println(doc.asXML()); //System.out.println(formatXml(doc)); return doc; } /** * map转xml map中含有根节点的键 * @param map * @throws DocumentException * @throws IOException */ public static Document map2xml(Map map) throws DocumentException, IOException { Iterator > entries = map.entrySet().iterator(); if(entries.hasNext()){ //获取第一个键创建根节点 Map.Entry entry = entries.next(); Document doc = DocumentHelper.createDocument(); Element root = DocumentHelper.createElement(entry.getKey()); doc.add(root); map2xml((Map)entry.getValue(), root); //System.out.println(doc.asXML()); //System.out.println(formatXml(doc)); return doc; } return null; } /** * map转xml * @param map * @param body xml元素 * @return */ private static Element map2xml(Map map, Element body) { Iterator > entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry entry = entries.next(); String key = entry.getKey(); Object value = entry.getValue(); if(key.startsWith("@")){ //属性 body.addAttribute(key.substring(1, key.length()), value.toString()); } else if(key.equals("#text")){ //有属性时的文本 body.setText(value.toString()); } else { if(value instanceof java.util.List ){ List list = (List)value; Object obj; for(int i=0; i
参考:
Java xml文件转换为map集合
http://my.oschina.net/u/2253208/blog/500877
java xml转map 高级版
http://xuelianbobo.iteye.com/blog/2153384