Springboot 整合dom4j 解析xml 字符串 转JSONObject

前言


本文只介绍使用  dom4j 以及fastjson的 方式, 因为平日使用比较多。老的那个json也能转,而且还封装好了XML,但是本文不做介绍。

正文

①加入  pom 依赖

        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

② 工具类  MyXmlUtil.java

import com.alibaba.fastjson.JSONArray;
import org.dom4j.*;
import org.springframework.util.StringUtils;
import java.util.List;

/**
 * @Author: JCccc
 * @Date: 2022-6-15 16:53
 * @Description:
 */
public class MyXmlUtil {

    public static void main(String[] args) throws DocumentException {

        String xmlStr="<dependency>\n" +
                "            <groupId>org.json</groupId>\n" +
                "            <artifactId>json</artifactId>\n" +
                "            <version>20180813</version>\n" +
                "        </dependency>";

        String xmlStrNew="<configuration>\n" +
                "    <settings>\n" +
                "        <setting name=\"useGeneratedKeys\" value=\"true\"/>\n" +
                "        <setting name=\"useColumnLabel\" value=\"true\"/>\n" +
                "        <setting name=\"mapUnderscoreToCamelCase\" value=\"true\"/>\n" +
                "        <setting name=\"logImpl\" value=\"STDOUT_LOGGING\"/>\n" +
                "    </settings>\n"+
                "</configuration>";

        if (StringUtils.hasLength(xmlStr)) {
            com.alibaba.fastjson.JSONObject jsonObject2 = MyXmlUtil.documentToJSONObject(xmlStr);
            System.out.println(jsonObject2);
        }

        if (StringUtils.hasLength(xmlStrNew)) {
            com.alibaba.fastjson.JSONObject jsonObject2 = MyXmlUtil.documentToJSONObject(xmlStrNew);
            System.out.println(jsonObject2);
        }

    }






    /**
     * org.dom4j.Document 转  com.alibaba.fastjson.JSONObject
     *
     * @param xml
     * @return
     * @throws DocumentException
     */
    public static com.alibaba.fastjson.JSONObject documentToJSONObject(String xml) throws DocumentException {
        //加上xml标签是为了获取最外层的标签,如果不需要可以去掉
        Document document = DocumentHelper.parseText("<xml>" + xml + "</xml>");
        return elementToJSONObject(document.getRootElement());
    }

    /**
     * org.dom4j.Element 转  com.alibaba.fastjson.JSONObject
     *
     * @param node
     * @return
     */
    public static com.alibaba.fastjson.JSONObject elementToJSONObject(Element node) {
        com.alibaba.fastjson.JSONObject result = new com.alibaba.fastjson.JSONObject();
        // 当前节点的名称、文本内容和属性
        // 当前节点的所有属性的list
        List<Attribute> listAttr = node.attributes();
        // 遍历当前节点的所有属性
        for (Attribute attr : listAttr) {
            result.put(attr.getName(), attr.getValue());
        }
        // 递归遍历当前节点所有的子节点
        // 所有一级子节点的list
        List<Element> listElement = node.elements();
        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;
    }


}

运行一下main方法 ,看看效果:
 

    public static void main(String[] args) throws DocumentException {

        String xmlStr="<dependency>\n" +
                "            <groupId>org.json</groupId>\n" +
                "            <artifactId>json</artifactId>\n" +
                "            <version>20180813</version>\n" +
                "        </dependency>";

        String xmlStrNew="<configuration>\n" +
                "    <settings>\n" +
                "        <setting name=\"useGeneratedKeys\" value=\"true\"/>\n" +
                "        <setting name=\"useColumnLabel\" value=\"true\"/>\n" +
                "        <setting name=\"mapUnderscoreToCamelCase\" value=\"true\"/>\n" +
                "        <setting name=\"logImpl\" value=\"STDOUT_LOGGING\"/>\n" +
                "    </settings>\n"+
                "</configuration>";

        if (StringUtils.hasLength(xmlStr)) {
            com.alibaba.fastjson.JSONObject jsonObject2 = MyXmlUtil.documentToJSONObject(xmlStr);
            System.out.println(jsonObject2);
        }

        if (StringUtils.hasLength(xmlStrNew)) {
            com.alibaba.fastjson.JSONObject jsonObject2 = MyXmlUtil.documentToJSONObject(xmlStrNew);
            System.out.println(jsonObject2);
        }

    }

效果:
 

{"dependency":[{"groupId":"org.json","artifactId":"json","version":"20180813"}]}

{

    "configuration": [

        {

            "settings": [

                {

                    "setting": [

                        {

                            "name": "useGeneratedKeys",

                            "value": "true"

                        },

                        {

                            "name": "useColumnLabel",

                            "value": "true"

                        },

                        {

                            "name": "mapUnderscoreToCamelCase",

                            "value": "true"

                        },

                        {

                            "name": "logImpl",

                            "value": "STDOUT_LOGGING"

                        }

                    ]

                }

            ]

        }

    ]

}

好了,该篇就到这。 

猜你喜欢

转载自blog.csdn.net/qq_35387940/article/details/129632629