欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用dom4j解析xml文件,并轉(zhuǎn)出json格式問題

 更新時間:2023年09月28日 09:50:12   作者:zhao_854093140  
這篇文章主要介紹了使用dom4j解析xml文件,并轉(zhuǎn)出json格式問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

使用dom4j解析xml文件,并轉(zhuǎn)出json格式

我這邊的需要就是講xml格式的soap的響應報文解析出來并返回給前端這個需求我本來是不會寫的 然后找我?guī)煾笌臀覍懙模?/p>

我怕以后自己遇到同樣的問題,所以在這里記錄下來首先要準備的依賴

<!--dom4j-->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
String xml = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
                "    <soap:Body>\n" +
                "        <ns2:askResponse xmlns:ns2=\"http://www.eastrobot.cn/ws/AskService\" xmlns:ns3=\"http://www.eastrobot.cn/ws/RobotServiceEx\">\n" +
                "            <robotResponse>\n" +
                "                <commands>\n" +
                "                    <args>ff8080816bf47a1b016c8f39b153000b</args>\n" +
                "                    <args>ff8080816bf47a1b016c8f3a1c4d000e</args>\n" +
                "                    <name>prop.categoryId</name>\n" +
                "                    <state>0</state>\n" +
                "                </commands>\n" +
                "                <commands>\n" +
                "                    <args>ff8080816bf47a1b016c8f3a1c4d000e</args>\n" +
                "                    <name>prop.objectId</name>\n" +
                "                    <state>0</state>\n" +
                "                </commands>\n" +
                "                <commands>\n" +
                "                    <args>94654758cf484e249bc71b52d6291cba</args>\n" +
                "                    <name>prop.sessionId</name>\n" +
                "                    <state>0</state>\n" +
                "                </commands>\n" +
                "                <content>測試答案</content>\n" +
                "                <moduleId>core</moduleId>\n" +
                "                <nodeId>00156577104596500003005056aa3f45</nodeId>\n" +
                "                <relatedQuestions>測試問題</relatedQuestions>\n" +
                "                <similarity>1.0</similarity>\n" +
                "                <type>1</type>\n" +
                "            </robotResponse>\n" +
                "        </ns2:askResponse>\n" +
                "    </soap:Body>\n" +
                "</soap:Envelope>";

這是一個xml格式的soap的響應報文

現(xiàn)在的需求就是將這個報文解析出來,我這里使用的是dom4j解析

public static JsonObject xmlToJson(String xml) throws Exception{
        //創(chuàng)建jsonobject
        JsonObject object = new JsonObject();
        //創(chuàng)建JsonArray
        JsonArray array = new JsonArray();
        //將array添加到object中
        object.add("commands",array);
        //創(chuàng)建一個SAXReader閱讀器
        SAXReader reader = new SAXReader();
        //根據(jù)字符串構(gòu)建字節(jié)數(shù)組輸入流
        InputStream is = new ByteArrayInputStream(xml.getBytes());
        //用閱讀器讀取文檔對象
        Document document = reader.read(is);
        //獲取文檔對象的根節(jié)點
        log.info("開始解析soap報文");
        Element root = document.getRootElement();
        //遍歷子節(jié)點
        for (Iterator iterator = root.elementIterator(); iterator.hasNext(); ) {
            Element bodyElement = (Element) iterator.next();
            for (Iterator iterator1 = bodyElement.elementIterator(); iterator1.hasNext(); ) {
                Element askResponseElement = (Element) iterator1.next();
                for (Iterator iterator2 = askResponseElement.elementIterator(); iterator2.hasNext(); ) {
                    Element robotResponseElement = (Element) iterator2.next();
                    for (Iterator iterator3 = robotResponseElement.elementIterator(); iterator3.hasNext(); ) {
                        Element element = (Element) iterator3.next();
                        String name = element.getName();
                        if ("commands".equals(name)) {
                            JsonObject ele = new JsonObject();
                            array.add(ele);
                            JsonArray subArray = new JsonArray();
                            ele.add("args",subArray);
                            for (Iterator iterator4 = element.elementIterator(); iterator4.hasNext(); ) {
                                Element subElement = (Element) iterator4.next();
                                String subName = subElement.getName();
                                if ("args".equalsIgnoreCase(subName)){
                                    subArray.add(subElement.getStringValue());
                                }else {
                                    ele.addProperty(subName, subElement.getStringValue());
                                }
                                //  System.out.println(subElement.getName() + ":" + subElement.getStringValue());
                            }
                        } else {
                            object.addProperty(name, element.getStringValue());
                            // System.out.println(name + ":" + element.getStringValue());
                        }
                    }
                }
            }
        }
        log.info("json格式的報文={}",object);
        return object;
    }

解析出來的就是這樣的

{
  "commands": [
    {
      "args": [
        "ff8080816bf47a1b016c8f39b153000b",
        "ff8080816bf47a1b016c8f3a1c4d000e"
      ],
      "name": "prop.categoryId",
      "state": "0"
    },
    {
      "args": [
        "ff8080816bf47a1b016c8f3a1c4d000e"
      ],
      "name": "prop.objectId",
      "state": "0"
    },
    {
      "args": [
        "94654758cf484e249bc71b52d6291cba"
      ],
      "name": "prop.sessionId",
      "state": "0"
    }
  ],
  "content": "測試答案",
  "moduleId": "core",
  "nodeId": "00156577104596500003005056aa3f45",
  "relatedQuestions": "測試問題",
  "similarity": "1.0",
  "type": "1"
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實現(xiàn)經(jīng)典游戲Flappy Bird的示例代碼

    Java實現(xiàn)經(jīng)典游戲Flappy Bird的示例代碼

    Flappy?Bird是13年紅極一時的小游戲,即摁上鍵控制鳥的位置穿過管道間的縫隙。本文將用Java語言實現(xiàn)這一經(jīng)典的游戲,需要的可以參考一下
    2022-02-02
  • Java獲取視頻時長和封面截圖

    Java獲取視頻時長和封面截圖

    這篇文章主要為大家詳細介紹了如何使用Java獲取視頻時長和封面截圖功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-03-03
  • Java集合的Collection接口和List接口詳解

    Java集合的Collection接口和List接口詳解

    這篇文章主要為大家詳細介紹了Java集合的Collection接口和List接口,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • MyBatis?如何使項目兼容多種數(shù)據(jù)庫的解決方案

    MyBatis?如何使項目兼容多種數(shù)據(jù)庫的解決方案

    要想做兼容多種數(shù)據(jù)庫,那毫無疑問,我們首先得明確我們要兼容哪些數(shù)據(jù)庫,他們的數(shù)據(jù)庫產(chǎn)品名稱是什么,本次我們講解了一套使項目兼容多種數(shù)據(jù)庫的方案,對MyBatis項目兼容多種數(shù)據(jù)庫操作方法感興趣的朋友一起看看吧
    2024-05-05
  • Spring Security使用Lambda DSL配置流程詳解

    Spring Security使用Lambda DSL配置流程詳解

    Spring Security 5.2 對 Lambda DSL 語法的增強,允許使用lambda配置HttpSecurity、ServerHttpSecurity,重要提醒,之前的配置方法仍然有效。lambda的添加旨在提供更大的靈活性,但是用法是可選的。讓我們看一下HttpSecurity的lambda配置與以前的配置樣式相比
    2023-02-02
  • java實現(xiàn)查找替換功能

    java實現(xiàn)查找替換功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)查找替換功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • java后端如何調(diào)用第三方接口(往header和body中的參數(shù)傳參)

    java后端如何調(diào)用第三方接口(往header和body中的參數(shù)傳參)

    這篇文章主要介紹了java后端如何調(diào)用第三方接口(往header和body中的參數(shù)傳參),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java中使用雪花算法(Snowflake)為分布式系統(tǒng)生成全局唯一ID代碼示例

    java中使用雪花算法(Snowflake)為分布式系統(tǒng)生成全局唯一ID代碼示例

    Java雪花算法是一種用于生成唯一ID的算法,它可以在分布式系統(tǒng)中生成全局唯一的ID,這篇文章主要給大家介紹了關(guān)于java中使用雪花算法(Snowflake)為分布式系統(tǒng)生成全局唯一ID的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • Java實現(xiàn)調(diào)用接口API并返回數(shù)據(jù)

    Java實現(xiàn)調(diào)用接口API并返回數(shù)據(jù)

    這篇文章主要介紹了Java實現(xiàn)調(diào)用接口API并返回數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • IDEA2022.1創(chuàng)建maven項目規(guī)避idea2022新建maven項目卡死無反應問題

    IDEA2022.1創(chuàng)建maven項目規(guī)避idea2022新建maven項目卡死無反應問題

    這篇文章主要介紹了IDEA2022.1創(chuàng)建maven項目規(guī)避idea2022新建maven項目卡死無反應問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08

最新評論