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

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

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

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

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

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

<!--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>";

這是一個(gè)xml格式的soap的響應(yīng)報(bào)文

現(xiàn)在的需求就是將這個(gè)報(bào)文解析出來,我這里使用的是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)建一個(gè)SAXReader閱讀器
        SAXReader reader = new SAXReader();
        //根據(jù)字符串構(gòu)建字節(jié)數(shù)組輸入流
        InputStream is = new ByteArrayInputStream(xml.getBytes());
        //用閱讀器讀取文檔對象
        Document document = reader.read(is);
        //獲取文檔對象的根節(jié)點(diǎn)
        log.info("開始解析soap報(bào)文");
        Element root = document.getRootElement();
        //遍歷子節(jié)點(diǎn)
        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格式的報(bào)文={}",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é)

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

相關(guān)文章

  • mybatis關(guān)于Criteria使用的小坑

    mybatis關(guān)于Criteria使用的小坑

    這篇文章主要介紹了mybatis關(guān)于Criteria使用的小坑,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java實(shí)現(xiàn)中國象棋游戲

    Java實(shí)現(xiàn)中國象棋游戲

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)中國象棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 運(yùn)行Springboot測試類查詢數(shù)據(jù)庫數(shù)據(jù)顯示白網(wǎng)頁問題及解決方法

    運(yùn)行Springboot測試類查詢數(shù)據(jù)庫數(shù)據(jù)顯示白網(wǎng)頁問題及解決方法

    Spring Boot應(yīng)用未能啟動(dòng)的原因是它沒有找到合適的數(shù)據(jù)庫配置具體來說,它需要一個(gè)數(shù)據(jù)源(DataSource),但未能在你的配置中找出,也沒有找到任何嵌入式數(shù)據(jù)庫(H2, HSQL 或 Derby),本文給大家分享運(yùn)行Springboot測試類查詢數(shù)據(jù)庫數(shù)據(jù)顯示白網(wǎng)頁問題及解決方法,一起看看吧
    2023-11-11
  • Java8接口的默認(rèn)方法

    Java8接口的默認(rèn)方法

    這篇文章主要為大家介紹了Java8接口的默認(rèn)方法,還為大家默認(rèn)方法的多重繼承,感興趣的朋友可以參考一下
    2016-01-01
  • Java實(shí)現(xiàn)PDF模板動(dòng)態(tài)賦值與文檔生成的多種方式

    Java實(shí)現(xiàn)PDF模板動(dòng)態(tài)賦值與文檔生成的多種方式

    除了 iText 庫,在 Java 中還有其他一些庫可以用于處理 PDF 模板并進(jìn)行動(dòng)態(tài)賦值,這篇文章就來為大家詳細(xì)介紹幾種常見的庫及其使用示例吧
    2025-07-07
  • Simple JSON開發(fā)指南

    Simple JSON開發(fā)指南

    注意:JSONPauser不是線程安全的,需要的朋友可以參考下
    2016-04-04
  • 詳解java中的static關(guān)鍵字

    詳解java中的static關(guān)鍵字

    這篇文章主要介紹了java中的static關(guān)鍵字的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • java編程進(jìn)階小白也能手寫HashMap代碼

    java編程進(jìn)階小白也能手寫HashMap代碼

    這篇文章是一篇java小白進(jìn)階篇本文教大家手寫一個(gè)HashMap實(shí)現(xiàn)的示例代碼,有需要的朋友可以借鑒參考下,希望對大家能夠有所進(jìn)益,祝大家早日升職加薪
    2021-10-10
  • Java?HashMap的底層實(shí)現(xiàn)原理深度解析

    Java?HashMap的底層實(shí)現(xiàn)原理深度解析

    HashMap基于數(shù)組+鏈表+紅黑樹結(jié)構(gòu),通過哈希算法和擴(kuò)容機(jī)制優(yōu)化性能,負(fù)載因子與樹化閾值平衡效率,是Java開發(fā)必備的高效數(shù)據(jù)結(jié)構(gòu),本文給大家介紹Java?HashMap的底層實(shí)現(xiàn)原理,感興趣的朋友一起看看吧
    2025-09-09
  • 【java 多線程】守護(hù)線程與非守護(hù)線程的詳解

    【java 多線程】守護(hù)線程與非守護(hù)線程的詳解

    這篇文章主要介紹了java守護(hù)線程與非守護(hù)線程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評論

韶山市| 南丰县| 洛川县| 武义县| 二手房| 永定县| 崇信县| 巴彦县| 清水河县| 成都市| 新宾| 怀安县| 长武县| 宜宾县| 民丰县| 黄平县| 永新县| 绥化市| 侯马市| 卢龙县| 高密市| 申扎县| 苏尼特左旗| 兴安盟| 沙湾县| 长岭县| 石台县| 昆明市| 民县| 枣阳市| 梁河县| 莎车县| 宝丰县| 禹城市| 郧西县| 周口市| 鹤山市| 遂昌县| 白山市| 伊金霍洛旗| 沐川县|