xml转json

来源:互联网 发布:数据库数据库系统 编辑:程序博客网 时间:2024/05/18 01:17
  1. import java.io.ByteArrayInputStream;  
  2. import java.io.File;  
  3. import java.io.InputStream;  
  4. import java.util.HashMap;  
  5. import java.util.LinkedList;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import net.sf.json.JSONObject;  
  10.   
  11. import org.jdom.Document;  
  12. import org.jdom.Element;  
  13. import org.jdom.input.SAXBuilder;  
  14.   
  15. public class Xml2JsonUtil {  
  16.     /** 
  17.      * 转换一个xml格式的字符串到json格式 
  18.      *  
  19.      * @param xml 
  20.      *            xml格式的字符串 
  21.      * @return 成功返回json 格式的字符串;失败反回null 
  22.      */  
  23.     @SuppressWarnings("unchecked")  
  24.     public static  String xml2JSON(String xml) {  
  25.         JSONObject obj = new JSONObject();  
  26.         try {  
  27.             InputStream is = new ByteArrayInputStream(xml.getBytes("utf-8"));  
  28.             SAXBuilder sb = new SAXBuilder();  
  29.             Document doc = sb.build(is);  
  30.             Element root = doc.getRootElement();  
  31.             obj.put(root.getName(), iterateElement(root));  
  32.             return obj.toString();  
  33.         } catch (Exception e) {  
  34.             e.printStackTrace();  
  35.             return null;  
  36.         }  
  37.     }  
  38.   
  39.     /** 
  40.      * 转换一个xml格式的字符串到json格式 
  41.      *  
  42.      * @param file 
  43.      *            java.io.File实例是一个有效的xml文件 
  44.      * @return 成功反回json 格式的字符串;失败反回null 
  45.      */  
  46.     @SuppressWarnings("unchecked")  
  47.     public static String xml2JSON(File file) {  
  48.         JSONObject obj = new JSONObject();  
  49.         try {  
  50.             SAXBuilder sb = new SAXBuilder();  
  51.             Document doc = sb.build(file);  
  52.             Element root = doc.getRootElement();  
  53.             obj.put(root.getName(), iterateElement(root));  
  54.             return obj.toString();  
  55.         } catch (Exception e) {  
  56.             e.printStackTrace();  
  57.             return null;  
  58.         }  
  59.     }  
  60.   
  61.     /** 
  62.      * 一个迭代方法 
  63.      *  
  64.      * @param element 
  65.      *            : org.jdom.Element 
  66.      * @return java.util.Map 实例 
  67.      */  
  68.     @SuppressWarnings("unchecked")  
  69.     private static Map  iterateElement(Element element) {  
  70.         List jiedian = element.getChildren();  
  71.         Element et = null;  
  72.         Map obj = new HashMap();  
  73.         List list = null;  
  74.         for (int i = 0; i < jiedian.size(); i++) {  
  75.             list = new LinkedList();  
  76.             et = (Element) jiedian.get(i);  
  77.             if (et.getTextTrim().equals("")) {  
  78.                 if (et.getChildren().size() == 0)  
  79.                     continue;  
  80.                 if (obj.containsKey(et.getName())) {  
  81.                     list = (List) obj.get(et.getName());  
  82.                 }  
  83.                 list.add(iterateElement(et));  
  84.                 obj.put(et.getName(), list);  
  85.             } else {  
  86.                 if (obj.containsKey(et.getName())) {  
  87.                     list = (List) obj.get(et.getName());  
  88.                 }  
  89.                 list.add(et.getTextTrim());  
  90.                 obj.put(et.getName(), list);  
  91.             }  
  92.         }  
  93.         return obj;  
  94.     }  
  95.   
  96.     // 测试  
  97.     public static void main(String[] args) {  
  98.         System.out.println(  Xml2JsonUtil.xml2JSON("<MapSet>"  
  99.                 + "<MapGroup id='Sheboygan'>" + "<Map>"  
  100.                 + "<Type>MapGuideddddddd</Type>"  
  101.                 + "<SingleTile>true</SingleTile>" + "<Extension>"  
  102.                 + "<ResourceId>ddd</ResourceId>" + "</Extension>" + "</Map>"  
  103.                 + "<Map>" + "<Type>ccc</Type>" + "<SingleTile>ggg</SingleTile>"  
  104.                 + "<Extension>" + "<ResourceId>aaa</ResourceId>"  
  105.                 + "</Extension>" + "</Map>" + "<Extension />" + "</MapGroup>"  
  106.                 + "<ddd>" + "33333333" + "</ddd>" + "<ddd>" + "444" + "</ddd>"  
  107.                 + "</MapSet>"));  
  108.     }  
0 0