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

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

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

 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ā)布時(shí)的最后一個(gè)支持Java 1.7的版本-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.78</version>
        </dependency>

dom4j實(shí)現(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必須有一個(gè)根節(jié)點(diǎn)
        xml = "<root>" + xml + "</root>";
        Document document = DocumentHelper.parseText(xml);
        Element root = document.getRootElement(); //根節(jié)點(diǎn)
        Map<String, Object> map = xml2map(root);
        return map;
    }
 
    /**
     * xml轉(zhuǎn)map 不帶屬性
     * 如果是兄弟元素,并且兄弟元素的標(biāo)簽相同,那么這些相同名稱的兄弟需要合并為一個(gè)數(shù)組
     */
    private static Map<String, Object> xml2map(Element element) {
        Map<String, Object> map = new LinkedHashMap<>();
        List<Element> list = element.elements(); //獲取所有子節(jié)點(diǎn)
        if (list.size() > 0) { //有子節(jié)點(diǎn)
            for (Element iter : list) { //遍歷所有子節(jié)點(diǎn)
                List<Object> mapList;
                if (iter.elements().size() > 0) { //子節(jié)點(diǎn)還有子節(jié)點(diǎn)
                    Map<String, Object> m = xml2map(iter); //遞歸調(diào)用
                    if (map.get(iter.getName()) != null) { //標(biāo)簽名稱已經(jīng)存在,說(shuō)明是一個(gè)數(shù)組結(jié)構(gòu)
                        Object obj = map.get(iter.getName());
                        if (obj instanceof List) { //標(biāo)簽的值是數(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é)點(diǎn)無(wú)子節(jié)點(diǎn)
                    if (map.get(iter.getName()) != null) { //標(biāo)簽名稱已經(jīng)存在,說(shuō)明是一個(gè)數(shù)組結(jié)構(gòu)
                        Object obj = map.get(iter.getName());
                        if (obj instanceof List) { //標(biāo)簽的值是數(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實(shí)現(xiàn)xml轉(zhuǎn)map與xml轉(zhuǎn)json字符串的文章就介紹到這了,更多相關(guān)dom4j xml轉(zhuǎn)map與xml轉(zhuǎn)json內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

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

    Mybatis pagehelper分頁(yè)插件使用過(guò)程解析

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

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

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

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

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

    SpringBoot為何可以使用Jar包啟動(dòng)詳解

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

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

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

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

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

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

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

最新評(píng)論

富源县| 巩留县| 石台县| 望都县| 马山县| 随州市| 浏阳市| 澄城县| 静安区| 通榆县| 罗城| 江都市| 马龙县| 江陵县| 兴仁县| 凤山市| 都兰县| 峨山| 灵寿县| 芮城县| 油尖旺区| 濉溪县| 香格里拉县| 衡东县| 泸溪县| 泽州县| 岑溪市| 四子王旗| 交口县| 阿坝| 增城市| 金昌市| 柳州市| 容城县| 汶川县| 阿图什市| 于都县| 龙川县| 肇东市| 富锦市| 南陵县|