java利用dom4j将xml字符串转换为json

  1 import java.util.HashMap;
  2 import java.util.LinkedList;
  3 import java.util.List;
  4 import java.util.Map;
  5 
  6 import org.dom4j.Document;
  7 import org.dom4j.DocumentHelper;
  8 import org.dom4j.Element;
  9 
 10 import net.sf.json.JSONObject;
 11 
 12 public class Xml2JsonUtil {
 13     
 14     
 15     /**
 16      * 转换一个xml格式的字符串到json格式
 17      * 
 18      * @param xml
 19      *            xml格式的字符串
 20      * @return 成功返回json 格式的字符串;失败反回null
 21      */
 22     @SuppressWarnings("unchecked")
 23     public static  String xml2JSON(String xml) {
 24         JSONObject obj = new JSONObject();
 25         try {
 26             Document doc = DocumentHelper.parseText(xml);
 27             Element root = doc.getRootElement();
 28             obj.put(root.getName(), iterateElement(root));
 29             return obj.toString();
 30         } catch (Exception e) {
 31             e.printStackTrace();
 32             return null;
 33         }
 34     }
 35 
 36     /**
 37      * 一个迭代方法
 38      * 
 39      * @param element
 40      * @return java.util.Map 实例
 41      */
 42     @SuppressWarnings("unchecked")
 43     private static Map  iterateElement(Element element) {
 44         List jiedian = element.elements();
 45         Element et = null;
 46         Map obj = new HashMap();
 47         Object temp;
 48         List list = null;
 49         for (int i = 0; i < jiedian.size(); i++) {
 50             list = new LinkedList();
 51             et = (Element) jiedian.get(i);
 52             if (et.getTextTrim().equals("")) {
 53                 if (et.elements().size() == 0)
 54                     continue;
 55                 if (obj.containsKey(et.getName())) {
 56                     temp = obj.get(et.getName());
 57                     if(temp instanceof List){
 58                         list = (List)temp;
 59                         list.add(iterateElement(et));
 60                     }else if(temp instanceof Map){
 61                         list.add((HashMap)temp);
 62                         list.add(iterateElement(et));
 63                     }else{
 64                         list.add((String)temp);
 65                         list.add(iterateElement(et));
 66                     }
 67                     obj.put(et.getName(), list);
 68                 }else{
 69                     obj.put(et.getName(), iterateElement(et));
 70                 }
 71             } else {
 72                 if (obj.containsKey(et.getName())) {
 73                     temp = obj.get(et.getName());
 74                     if(temp instanceof List){
 75                         list = (List)temp;
 76                         list.add(et.getTextTrim());
 77                     }else if(temp instanceof Map){
 78                         list.add((HashMap)temp);
 79                         list.add(iterateElement(et));
 80                     }else{
 81                         list.add((String)temp);
 82                         list.add(et.getTextTrim());
 83                     }
 84                     obj.put(et.getName(), list);
 85                 }else{
 86                     obj.put(et.getName(), et.getTextTrim());
 87                 }
 88                 
 89             }
 90             
 91         }
 92         return obj;
 93     }
 94     
 95     // 测试
 96     public static void main(String[] args) {
 97         String xmlStr = "<getOmElement>" +
 98         "<HEADER>" +
 99         "<SOURCEID>MDM</SOURCEID>" +
100         "<SOURCEID>MDM</SOURCEID>" +
101         "<myChild/>"+
102         "<DESTINATIONID>DAXT</DESTINATIONID>" +
103         "<SIZE>1</SIZE>" +
104         "<TYPE>ADD</TYPE>" +
105         "<BO>ORG</BO>" +
106         "<CHECK>"+
107         "checkCode"
108         +"</CHECK>"+
109         "</HEADER>" +
110         "<REQUEST>" +
111         "<DATAROW>" +
112         "<ORGUUID>460c5239-13f662e8f67-2f1936027f000a1d675dd1399911234</ORGUUID>" +
113         "</DATAROW>" +    
114         "<DATAROW>" +
115         "<ORGUUID>460c5239-13f662e8f67-2f1936027f000a1d675dd139991369c4</ORGUUID>" +
116         "</DATAROW>" +    
117         "</REQUEST>" +
118         "</getOmElement>";
119         
120         System.out.println(Xml2JsonUtil.xml2JSON(xmlStr));
121     }
122 }