亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2024年11月06日 10:08:09   作者:小百菜  
這篇文章主要為大家詳細(xì)介紹了如何使用dom4j實現(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ā)布時的最后一個支持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é)點(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)簽相同,那么這些相同名稱的兄弟需要合并為一個數(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)存在,說明是一個數(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)無子節(jié)點(diǎn)
                    if (map.get(iter.getName()) != null) { //標(biāo)簽名稱已經(jīng)存在,說明是一個數(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實現(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)文章

  • JavaGUI界面實現(xiàn)頁面跳轉(zhuǎn)方法

    JavaGUI界面實現(xiàn)頁面跳轉(zhuǎn)方法

    這篇文章主要給大家介紹了關(guān)于JavaGUI界面實現(xiàn)頁面跳轉(zhuǎn)的相關(guān)資料, GUI是指圖形用戶界面,指采用圖形方式顯示的計算機(jī)操作用戶界面,需要的朋友可以參考下
    2023-07-07
  • java高級用法之JNA中的Function

    java高級用法之JNA中的Function

    這篇文章主要介紹了java高級用法之JNA中的Function,JAVA中的映射在JNA中就是一個function。通過或者function對象,我們可以實現(xiàn)一些非常強(qiáng)大的功能,下面一起進(jìn)入文章看看具體內(nèi)容吧
    2022-04-04
  • Go Java算法之找不同示例詳解

    Go Java算法之找不同示例詳解

    這篇文章主要為大家介紹了Go Java算法之找不同示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • SpringBoot項目后端開發(fā)邏輯全面梳理

    SpringBoot項目后端開發(fā)邏輯全面梳理

    這篇文章主要介紹了SpringBoot項目后端開發(fā)邏輯全面梳理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java使用Ehcache緩存框架的技術(shù)指南

    Java使用Ehcache緩存框架的技術(shù)指南

    Ehcache 是 Java 平臺下一個開源、高性能的分布式緩存框架,常用于提高系統(tǒng)性能和可擴(kuò)展性,它能夠幫助開發(fā)者緩存頻繁訪問的數(shù)據(jù),從而減少對數(shù)據(jù)庫和其他持久化存儲的訪問壓力,本文給大家介紹了Java使用Ehcache緩存框架的技術(shù)指南,需要的朋友可以參考下
    2025-03-03
  • Maven 命令行打包 和 pom.xml的常用配置詳解

    Maven 命令行打包 和 pom.xml的常用配置詳解

    這篇文章主要介紹了Maven 命令行打包 和 pom.xml的常用配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 微服務(wù)領(lǐng)域Spring Boot自動伸縮的實現(xiàn)方法

    微服務(wù)領(lǐng)域Spring Boot自動伸縮的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于微服務(wù)領(lǐng)域Spring Boot自動伸縮的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • 詳解如何查看Elasticsearch的Debug日志

    詳解如何查看Elasticsearch的Debug日志

    這篇文章主要為大家介紹了詳解如何查看Elasticsearch的Debug日志,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • java中刪除數(shù)組中重復(fù)元素方法探討

    java中刪除數(shù)組中重復(fù)元素方法探討

    這個是一個老問題,但是發(fā)現(xiàn)大多數(shù)人說的還不夠透。小弟就在這里拋磚引玉了,歡迎拍磚
    2013-10-10
  • 基于Springboot+Junit+Mockito做單元測試的示例

    基于Springboot+Junit+Mockito做單元測試的示例

    本篇文章主要介紹了基于Springboot+Junit+Mockito做單元測試的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02

最新評論