• 【推荐】com.alibaba方式xml转json,能将xml的所有属性方法,全部转化为json


    推荐,这种转化方法,能将xml的所有属性方法,全部转化为json

    <dependency>
    	<groupId>dom4j</groupId>
    	<artifactId>dom4j</artifactId>
    	<version>1.6.1</version>
    </dependency>
    <dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>fastjson</artifactId>
    	<version>1.1.41</version>
    </dependency>
    

      

    工具类

    import java.util.List;
     
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
     
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
     
    public class XmlTool {
    	/**
         * String 转 org.dom4j.Document
         * @param xml
         * @return
         * @throws DocumentException
         */
        public static Document strToDocument(String xml){
            try {
            	//加上xml标签是为了获取最外层的标签,如果不需要可以去掉
    			return DocumentHelper.parseText("<xml>"+xml+"</xml>");
    		} catch (DocumentException e) {
    			return null;
    		}
        }
     
        /**
         * org.dom4j.Document 转  com.alibaba.fastjson.JSONObject
         * @param xml
         * @return
         * @throws DocumentException
         */
        public static JSONObject documentToJSONObject(String xml){
    		return elementToJSONObject(strToDocument(xml).getRootElement());
        }
     
        /**
         * org.dom4j.Element 转  com.alibaba.fastjson.JSONObject
         * @param node
         * @return
         */
        public static JSONObject elementToJSONObject(Element node) {
            JSONObject result = new JSONObject();
            // 当前节点的名称、文本内容和属性
            List<Attribute> listAttr = node.attributes();// 当前节点的所有属性的list
            for (Attribute attr : listAttr) {// 遍历当前节点的所有属性
                result.put(attr.getName(), attr.getValue());
            }
            // 递归遍历当前节点所有的子节点
            List<Element> listElement = node.elements();// 所有一级子节点的list
            if (!listElement.isEmpty()) {
                for (Element e : listElement) {// 遍历所有一级子节点
                    if (e.attributes().isEmpty() && e.elements().isEmpty()) // 判断一级节点是否有属性和子节点
                        result.put(e.getName(), e.getTextTrim());// 沒有则将当前节点作为上级节点的属性对待
                    else {
                        if (!result.containsKey(e.getName())) // 判断父节点是否存在该一级节点名称的属性
                            result.put(e.getName(), new JSONArray());// 没有则创建
                        ((JSONArray) result.get(e.getName())).add(elementToJSONObject(e));// 将该一级节点放入该节点名称的属性对应的值中
                    }
                }
            }
            return result;
        }
    }
    

      

    测试:

    public static void main(String[] args) {
    		String result = "<applications>"
    						+"<versions__delta>1</versions__delta>"
    						+"<apps__hashcode></apps__hashcode>"
    						+"</applications>";
    	       
    	   System.out.println(XmlTool.documentToJSONObject(result).toJSONString());
    	       
    	       
    }
    

      

  • 相关阅读:
    php数组到json的转变
    微信小程序获取微信绑定的手机号
    微信小程序授权登录
    用海豚框架(DolphinPHP)实现单/多图片上传时,如何获得图片路径
    数据库索引-简单了解
    php将二维数组转换成我想要的一维数组
    php的八大数据类型
    单例模式
    Springboot配置Sqlserver
    WinForm 文件操作
  • 原文地址:https://www.cnblogs.com/achengmu/p/13560010.html
Copyright © 2020-2023  润新知