zoukankan      html  css  js  c++  java
  • 使用dom4j解析xml为json对象

    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    public class XmlToJson {
        /**
         * 将xml转换为JSON对象
         * 
         * @param xml
         *            xml字符串
         * @return
         * @throws Exception
         */
        public static JSONObject xmltoJson(String xml) throws Exception {
            JSONObject jsonObject = new JSONObject();
            Document document = DocumentHelper.parseText(xml);
            // 获取根节点元素对象
            Element root = document.getRootElement();
            iterateNodes(root, jsonObject);
            return jsonObject;
        }
    
        /**
         * 遍历元素
         * 
         * @param node
         *            元素
         * @param json
         *            将元素遍历完成之后放的JSON对象
         */
        @SuppressWarnings("unchecked")
        public static void iterateNodes(Element node, JSONObject json) {
            // 获取当前元素的名称
            String nodeName = node.getName();
            // 判断已遍历的JSON中是否已经有了该元素的名称
            if (json.containsKey(nodeName)) {
                // 该元素在同级下有多个
                Object Object = json.get(nodeName);
                JSONArray array = null;
                if (Object instanceof JSONArray) {
                    array = (JSONArray) Object;
                } else {
                    array = new JSONArray();
                    array.add(Object);
                }
                // 获取该元素下所有子元素
                List<Element> listElement = node.elements();
                if (listElement.isEmpty()) {
                    // 该元素无子元素,获取元素的值
                    String nodeValue = node.getTextTrim();
                    array.add(nodeValue);
                    json.put(nodeName, array);
                    return;
                }
                // 有子元素
                JSONObject newJson = new JSONObject();
                // 遍历所有子元素
                for (Element e : listElement) {
                    // 递归
                    iterateNodes(e, newJson);
                }
                array.add(newJson);
                json.put(nodeName, array);
                return;
            }
            // 该元素同级下第一次遍历
            // 获取该元素下所有子元素
            List<Element> listElement = node.elements();
            if (listElement.isEmpty()) {
                // 该元素无子元素,获取元素的值
                String nodeValue = node.getTextTrim();
                json.put(nodeName, nodeValue);
                return;
            }
            // 有子节点,新建一个JSONObject来存储该节点下子节点的值
            JSONObject object = new JSONObject();
            // 遍历所有一级子节点
            for (Element e : listElement) {
                // 递归
                iterateNodes(e, object);
            }
            json.put(nodeName, object);
            return;
        }
    
        /**
         * 测试的main方法
         */
        public static void main(String[] args) throws Exception {
            String xml = "<?xml version="1.0" encoding="UTF-8"?>" + "<root>" + " <mdcardno>查询卡号</mdcardno>"
                    + " <count>返回明细条数</count>" + " <rd>" + "     <trxzone>交易地区号1</trxzone>"
                    + "     <trxcurr>交易币种1</trxcurr>" + " </rd>" + " <rd>" + "     <trxzone>交易地区号3</trxzone>"
                    + "     <trxcurr>交易币种3</trxcurr>" + " </rd>" + " <rd>" + "     <trxzone>交易地区号2</trxzone>"
                    + "     <trxcurr>交易币种2</trxcurr>" + "</rd>" + "</root>";
            JSONObject jsonObject = xmltoJson(xml);
            System.out.println(jsonObject);
        }
    }
  • 相关阅读:
    poj3613 Cow Relays【好题】【最短路】【快速幂】【离散化】
    poj1734 Sightseeing trip【最小环】
    poj1094 Sorting It All Out【floyd】【传递闭包】【拓扑序】
    BZOJ2200 道路和航线【好题】【dfs】【最短路】【缩点】
    CH6101 最优贸易【最短路】
    poj3662 Telephone Lines【最短路】【二分】
    codeforces#514 Div2---1059ABCD
    进阶指南---基本算法【阅读笔记】
    hdu5954 Do not pour out【积分】【二分】【待补.....】
    mariadb yum安装
  • 原文地址:https://www.cnblogs.com/lxcmyf/p/9015542.html
Copyright © 2011-2022 走看看