zoukankan      html  css  js  c++  java
  • 【推荐】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());
    	       
    	       
    }
    

      

  • 相关阅读:
    web基础(Myeclipse、IDEA新建Servlet工程)
    web基础(myeclipse新建web工程、tomcat服务器)
    http协议(http请求、响应、抓包、get和post请求)
    jsp(简介、脚本和注释、运行原理)
    类与对象(类、对象、对象的比较)
    变量(成员变量、局部变量)、堆栈
    目录的基本操作
    目录切换命令
    数组(一维数组、二维数组、与数组相关的函数)
    流程控制(顺序结构、条件语句、选择语句、循环语句)
  • 原文地址:https://www.cnblogs.com/achengmu/p/13560010.html
Copyright © 2011-2022 走看看