irpas技术客

Springboot 整合dom4j 解析xml 字符串 转JSONObject_springboot 解析xml字符串_小目标青年

大大的周 8299

前言

本文只介绍使用??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"

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ]

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ]

? ? ? ? }

? ? ]

}

好了,该篇就到这。?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #springboot #解析xml字符串 #整合dom4j #解析xml