使用dom4j解析xml文件,并转出json格式问题

 更新时间:2023年09月28日 09:50:12   作者:zhao_854093140  
这篇文章主要介绍了使用dom4j解析xml文件,并转出json格式问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

使用dom4j解析xml文件,并转出json格式

我这边的需要就是讲xml格式的soap的响应报文解析出来并返回给前端这个需求我本来是不会写的 然后找我师父帮我写的,

我怕以后自己遇到同样的问题,所以在这里记录下来首先要准备的依赖

<!--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的响应报文

现在的需求就是将这个报文解析出来,我这里使用的是dom4j解析

public static JsonObject xmlToJson(String xml) throws Exception{
        //创建jsonobject
        JsonObject object = new JsonObject();
        //创建JsonArray
        JsonArray array = new JsonArray();
        //将array添加到object中
        object.add("commands",array);
        //创建一个SAXReader阅读器
        SAXReader reader = new SAXReader();
        //根据字符串构建字节数组输入流
        InputStream is = new ByteArrayInputStream(xml.getBytes());
        //用阅读器读取文档对象
        Document document = reader.read(is);
        //获取文档对象的根节点
        log.info("开始解析soap报文");
        Element root = document.getRootElement();
        //遍历子节点
        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"
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mybatis关于Criteria使用的小坑

    mybatis关于Criteria使用的小坑

    这篇文章主要介绍了mybatis关于Criteria使用的小坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java实现中国象棋游戏

    Java实现中国象棋游戏

    这篇文章主要为大家详细介绍了Java实现中国象棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 运行Springboot测试类查询数据库数据显示白网页问题及解决方法

    运行Springboot测试类查询数据库数据显示白网页问题及解决方法

    Spring Boot应用未能启动的原因是它没有找到合适的数据库配置具体来说,它需要一个数据源(DataSource),但未能在你的配置中找出,也没有找到任何嵌入式数据库(H2, HSQL 或 Derby),本文给大家分享运行Springboot测试类查询数据库数据显示白网页问题及解决方法,一起看看吧
    2023-11-11
  • Java8接口的默认方法

    Java8接口的默认方法

    这篇文章主要为大家介绍了Java8接口的默认方法,还为大家默认方法的多重继承,感兴趣的朋友可以参考一下
    2016-01-01
  • Java实现PDF模板动态赋值与文档生成的多种方式

    Java实现PDF模板动态赋值与文档生成的多种方式

    除了 iText 库,在 Java 中还有其他一些库可以用于处理 PDF 模板并进行动态赋值,这篇文章就来为大家详细介绍几种常见的库及其使用示例吧
    2025-07-07
  • Simple JSON开发指南

    Simple JSON开发指南

    注意:JSONPauser不是线程安全的,需要的朋友可以参考下
    2016-04-04
  • 详解java中的static关键字

    详解java中的static关键字

    这篇文章主要介绍了java中的static关键字的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • java编程进阶小白也能手写HashMap代码

    java编程进阶小白也能手写HashMap代码

    这篇文章是一篇java小白进阶篇本文教大家手写一个HashMap实现的示例代码,有需要的朋友可以借鉴参考下,希望对大家能够有所进益,祝大家早日升职加薪
    2021-10-10
  • Java HashMap的底层实现原理深度解析

    Java HashMap的底层实现原理深度解析

    HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍Java HashMap的底层实现原理,感兴趣的朋友一起看看吧
    2025-09-09
  • 【java 多线程】守护线程与非守护线程的详解

    【java 多线程】守护线程与非守护线程的详解

    这篇文章主要介绍了java守护线程与非守护线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论