最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用dom4j實現(xiàn)xml轉(zhuǎn)map與xml轉(zhuǎn)json字符串

 更新時間:2024年11月06日 10:08:09   作者:小百菜  
這篇文章主要為大家詳細介紹了如何使用dom4j實現(xiàn)xml轉(zhuǎn)map與xml轉(zhuǎn)json字符串功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

 dom4j依賴包

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

map轉(zhuǎn)為json字符串方法很多,這里使用fastjson

        <!--fastjson 版本1.2.78是Fastjson在發(fā)布時的最后一個支持Java 1.7的版本-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.78</version>
        </dependency>

dom4j實現(xiàn)xml轉(zhuǎn)map,再使用 fastjson 將map轉(zhuǎn)為json字符串

package com.study;
 
import com.alibaba.fastjson.JSON;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
 
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
 
public class Test {
    public static void main(String[] args) throws Exception {
        String xml = "<sites><site><name>RUNOOB</name><url>www.runoob.com</url></site><site><name>Google</name><url>www.google.com</url></site><site><name>Facebook</name><url>www.facebook.com</url></site></sites>";
        Map<String, Object> map = xml2map(xml);
        String json = JSON.toJSONString(map);
        System.out.println(json);
    }
 
    /**
     * xml轉(zhuǎn)map 不帶屬性
     */
    public static Map<String, Object> xml2map(String xml) throws DocumentException {
        // xml必須有一個根節(jié)點
        xml = "<root>" + xml + "</root>";
        Document document = DocumentHelper.parseText(xml);
        Element root = document.getRootElement(); //根節(jié)點
        Map<String, Object> map = xml2map(root);
        return map;
    }
 
    /**
     * xml轉(zhuǎn)map 不帶屬性
     * 如果是兄弟元素,并且兄弟元素的標簽相同,那么這些相同名稱的兄弟需要合并為一個數(shù)組
     */
    private static Map<String, Object> xml2map(Element element) {
        Map<String, Object> map = new LinkedHashMap<>();
        List<Element> list = element.elements(); //獲取所有子節(jié)點
        if (list.size() > 0) { //有子節(jié)點
            for (Element iter : list) { //遍歷所有子節(jié)點
                List<Object> mapList;
                if (iter.elements().size() > 0) { //子節(jié)點還有子節(jié)點
                    Map<String, Object> m = xml2map(iter); //遞歸調(diào)用
                    if (map.get(iter.getName()) != null) { //標簽名稱已經(jīng)存在,說明是一個數(shù)組結(jié)構(gòu)
                        Object obj = map.get(iter.getName());
                        if (obj instanceof List) { //標簽的值是數(shù)組結(jié)構(gòu),取出數(shù)組添加新的元素
                            mapList = (List) obj; //取出舊值
                            mapList.add(m); //放入新值
                        } else {
                            mapList = new ArrayList<>();
                            mapList.add(obj); //放入舊值
                            mapList.add(m); //放入新值
                        }
                        map.put(iter.getName(), mapList);
                    } else {
                        map.put(iter.getName(), m);
                    }
                } else { //子節(jié)點無子節(jié)點
                    if (map.get(iter.getName()) != null) { //標簽名稱已經(jīng)存在,說明是一個數(shù)組結(jié)構(gòu)
                        Object obj = map.get(iter.getName());
                        if (obj instanceof List) { //標簽的值是數(shù)組結(jié)構(gòu),取出數(shù)組添加新的元素
                            mapList = (List) obj; //取出舊值
                            mapList.add(iter.getText()); //放入新值
                        } else {
                            mapList = new ArrayList<>();
                            mapList.add(obj); //放入舊值
                            mapList.add(iter.getText()); //放入新值
                        }
                        map.put(iter.getName(), mapList);
                    } else {
                        map.put(iter.getName(), iter.getText());
                    }
                }
            }
        }
        return map;
    }
 
}

效果如下:

<sites>
    <site>
        <name>RUNOOB</name>
        <url>www.runoob.com</url>
    </site>
    <site>
        <name>Google</name>
        <url>www.google.com</url>
    </site>
    <site>
        <name>Facebook</name>
        <url>www.facebook.com</url>
    </site>
</sites>

xml轉(zhuǎn)換為json后效果

{
	"sites": {
		"site": [
			{
				"name": "RUNOOB",
				"url": "www.runoob.com"
			},
			{
				"name": "Google",
				"url": "www.google.com"
			},
			{
				"name": "Facebook",
				"url": "www.facebook.com"
			}
		]
	}
}

到此這篇關(guān)于使用dom4j實現(xiàn)xml轉(zhuǎn)map與xml轉(zhuǎn)json字符串的文章就介紹到這了,更多相關(guān)dom4j xml轉(zhuǎn)map與xml轉(zhuǎn)json內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中進程、協(xié)程與線程的區(qū)別詳解

    Java中進程、協(xié)程與線程的區(qū)別詳解

    這篇文章主要介紹了Java中進程,線程,協(xié)程的概念、區(qū)別以及使用場景的選擇,早期的操作系統(tǒng)每個程序就是一個進程,知道一個程序運行完,才能進行下一個進程,就是"單進程時代",一切的程序只能串行發(fā)生,需要的朋友可以參考下
    2023-08-08
  • Java迭代器遍歷list的方法及代碼分析

    Java迭代器遍歷list的方法及代碼分析

    在本篇內(nèi)容里系小編給大家分享的是一篇關(guān)于Java迭代器遍歷list的方法總結(jié)內(nèi)容,有需要的朋友們可以參考學習下。
    2022-11-11
  • Java如何打印完整的堆棧信息

    Java如何打印完整的堆棧信息

    這篇文章主要為大家介紹了Java如何打印完整的堆棧信息示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Mybatis pagehelper分頁插件使用過程解析

    Mybatis pagehelper分頁插件使用過程解析

    這篇文章主要介紹了mybatis pagehelper分頁插件使用過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java線程池核心參數(shù)原理及使用指南

    Java線程池核心參數(shù)原理及使用指南

    本文詳細介紹了Java線程池的基本概念、核心類、核心參數(shù)、工作原理、常見類型以及最佳實踐,通過理解每個參數(shù)的含義和工作原理,可以更好地配置線程池,提高系統(tǒng)性能,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Maven 版本管理與 flatten-maven-plugin 插件的使用解析

    Maven 版本管理與 flatten-maven-plugin 插件的使用解析

    這篇文章主要介紹了Maven 版本管理與 flatten-maven-plugin 插件的使用解析,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • SpringBoot為何可以使用Jar包啟動詳解

    SpringBoot為何可以使用Jar包啟動詳解

    springboot jar包啟動腳本,適用于快速啟動,刪除,重啟,以及查看狀態(tài),下面這篇文章主要給大家介紹了關(guān)于SpringBoot為何可以使用Jar包啟動的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 詳解Java如何在CompletableFuture中實現(xiàn)日志記錄

    詳解Java如何在CompletableFuture中實現(xiàn)日志記錄

    這篇文章主要為大家詳細介紹了一種slf4j自帶的MDC類,來記錄完整的請求日志,和在CompletableFuture異步線程中如何保留鏈路id,需要的可以參考一下
    2023-04-04
  • Javassist如何操作Java 字節(jié)碼

    Javassist如何操作Java 字節(jié)碼

    這篇文章主要介紹了Javassist如何操作Java 字節(jié)碼,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-09-09
  • Java之a(chǎn)pi網(wǎng)關(guān)斷言及過濾器案例講解

    Java之a(chǎn)pi網(wǎng)關(guān)斷言及過濾器案例講解

    這篇文章主要介紹了Java之a(chǎn)pi網(wǎng)關(guān)斷言及過濾器案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論

东丰县| 福安市| 老河口市| 沾化县| 洪江市| 黔江区| 盈江县| 新龙县| 鹤岗市| 通州市| 中阳县| 岑溪市| 乐亭县| 龙口市| 西乡县| 汉寿县| 海晏县| 纳雍县| 东丽区| 尉氏县| 新津县| 奎屯市| 仪征市| 罗田县| 天柱县| 泽普县| 安泽县| 尚义县| 东宁县| 枞阳县| 分宜县| 上栗县| 屏南县| 巴彦县| 平定县| 荆州市| 黄山市| 司法| 准格尔旗| 江华| 沙湾县|