zoukankan      html  css  js  c++  java
  • xml转map json

    xml转map json

    <!--xml--> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.1</version> </dependency> <!--json--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency>

    package com.yw.test.utils;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.serializer.SerializerFeature;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @description: xml 转map
     * @author: YW
     * @time: 2020/10/12 13:09
     */
    public class XmlToMapUtils {
    
        private static final Logger logger = LoggerFactory.getLogger(XmlToMapUtils.class);
        /**
         * @description: xml格式字符串转换为map
         * @author: YW
         * @time: 2020/10/12 13:16
         */
        public static Map<String, Object> multilayerXmlToMap(String xml) {
            Document doc = null;
            try {
                doc = DocumentHelper.parseText(xml);
            } catch (DocumentException e) {
                logger.error("xml字符串解析,失败 --> {}", e);
            }
            Map<String, Object> map = new HashMap<>();
            if (null == doc) {
                return map;
            }
            // 获取根元素
            Element rootElement = doc.getRootElement();
            // 获取根节点下单元素
            recursionXmlToMap(rootElement, map);
            return map;
        }
    
        /**
         * @description: 多层 递归调用   element 节点元素  outmap 用于存储xml数据的map
         * @author: YW
         * @time: 2020/10/12 13:14
         */
        @SuppressWarnings("unchecked")
        private static void recursionXmlToMap(Element element, Map<String, Object> outmap) {
            // 得到根元素下的子元素列表
            List<Element> list = element.elements();
            int size = list.size();
            if (size == 0) {
                // 如果没有子元素,则将其存储进map中
                outmap.put(element.getName(), element.getTextTrim());
            } else {
                // innermap用于存储子元素的属性名和属性值
                Map<String, Object> innermap = new HashMap<>();
                // 遍历子元素
                list.forEach(childElement -> recursionXmlToMap(childElement, innermap));
                outmap.put(element.getName(), innermap);
            }
        }
    
    
        public static void main(String[] args) {
            String s3="<?xml version="1.0" encoding="ISO-8859-1"?>
    " +
                    "<note>
    " +
                    "<to>George</to>
    " +
                    "<from>John</from>
    " +
                    "<heading>Reminder</heading>
    " +
                    "<body>Don't forget the meeting!</body>
    " +
                    "</note>";
     
            Map<String, Object> map = multilayerXmlToMap(s3);
            String s = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);
            System.out.println(s);
        }
    }
      
    

      

  • 相关阅读:
    webpack-dev-server报错
    npm run dev 报错 run `npm audit fix` to fix them, or `npm audit` for details
    vscode里使用.vue代码模板的方法
    console.log()中的%d,%s等代表的输出类型
    使用Babel将单独的js文件 中的 ES6转码为ES5
    jQuery选择什么版本 1.x? 2.x? 3.x?
    在线jquery.min.js、vue.min.js引用
    WebSocket对象的“readyState”属性记录连接过程中的状态值
    vue项目中,使用vue-awesome-swiper插件实现轮播图
    vue-cli 项目里屏幕自适应
  • 原文地址:https://www.cnblogs.com/YuanWeiBlogger/p/13807485.html
Copyright © 2011-2022 走看看