Java XML解析工具类

Java XML解析工具类JavaXML解析工具类Java解析XML的方式有很多,这里不一一说明了,利用三方jar包,实现了一个XML工具类本身是有个需求,讲三方公司的XML请求文件中的Response里的属性赋值成java对象,没做完不需要了,只做到了解析,后续本来想利用解析出来的key进行遍历,利用FTL模板生成Java文件,有这个需求的小伙伴可以延续这个工具类。1.看看XML<?xmlversion=”1.0″encoding=”utf-8″?><!–每个协议有Request或Resp

大家好,又见面了,我是你们的朋友全栈君。

Java XML解析工具

  • Java解析XML的方式有很多,这里不一一说明了,利用三方jar包,实现了一个XML工具类
  • 本身是有个需求,讲三方公司的XML请求文件中的Response里的属性赋值成java对象,没做完不需要了,只做到了解析,后续本来想利用解析出来的key进行遍历,利用FTL模板生成Java文件,有这个需求的小伙伴可以延续这个工具类。

1. 看看XML

<?xml version="1.0" encoding="utf-8"?>
<!--每个协议有Request或Response两个节点,说明一个是请求,另一个假如请求成功,则返回相应结果 -->
<!-- 在请求时无Response节点,同样在返回时也没有Request节点-->
<Body >

  <Request OrgCode='' OperType='1'>

    <UserN></UserN>
   
    <PassWord></PassWord>
  </Request>
  <!--ErrMsg:如果错误则此处是错误信息(如节点无效或条件不足等),不可预料错误则以Err开头,以及Response节点下不能有子节点 -->
  <!--对于查询确实无符合条件的,则ErrMsg应该为空,只不过Response节点无子节点 -->
  <Response ErrMsg=''>
  
    <UserID>111</UserID>
    
    <UserName></UserName>
   
    <DoctorID></DoctorID>
    
    <DoctorName></DoctorName>
   
    <Province ID=''></Province>
  
    <City ID=''></City>
   
    <District ID=''></District>
    
    <Street ID=''></Street>
   
    <EmployeeNo ID=''></EmployeeNo>
   
    <RoleCD></RoleCD>
   
    <Zones>
      <Zone ID=''></Zone>
    </Zones>
  </Response>
</Body>


2. 看看Java代码

  1. 引入pom
    <!--解析xml报文-->
    	<dependency>
    		<groupId>dom4j</groupId>
    		<artifactId>dom4j</artifactId>
    		<version>1.6.1</version>
    	</dependency>
    	<dependency>
    		<groupId>jaxen</groupId>
    		<artifactId>jaxen</artifactId>
    		<version>1.1-beta-6</version>
    	</dependency>
    
  2. Java
    
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import org.apache.commons.lang3.StringUtils;
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import java.io.*;
    import java.util.*;
    /** * xml 解析 * * @author 如漩涡 * @date 2021/6/10 */
    public class XmlUtil { 
    
    /** * XML节点转换JSON对象 * * @param element 节点 * @param object 新的JSON存储 * @return JSON对象 */
    private static JSONObject xmlToJson(Element element, JSONObject object) { 
    
    List<Element> elements = element.elements();
    for (Element child : elements) { 
    
    Object value = object.get(child.getName());
    Object newValue;
    if (child.elements().size() > 0) { 
    
    JSONObject jsonObject = xmlToJson(child, new JSONObject(true));
    if (!jsonObject.isEmpty()) { 
    
    newValue = jsonObject;
    } else { 
    
    newValue = child.getText();
    }
    } else { 
    
    newValue = child.getText();
    }
    List<Attribute> attributes = child.attributes();
    if (!attributes.isEmpty()) { 
    
    JSONObject attrJsonObject = new JSONObject();
    for (Attribute attribute : attributes) { 
    
    attrJsonObject.put(attribute.getName(), attribute.getText());
    attrJsonObject.put("content", newValue);
    }
    newValue = attrJsonObject;
    }
    if (newValue != null) { 
    
    if (value != null) { 
    
    if (value instanceof JSONArray) { 
    
    ((JSONArray) value).add(newValue);
    } else { 
    
    JSONArray array = new JSONArray();
    array.add(value);
    array.add(newValue);
    object.put(child.getName(), array);
    }
    } else { 
    
    object.put(child.getName(), newValue);
    }
    }
    }
    return object;
    }
    /** * XML字符串转换JSON对象 * * @param xmlStr XML字符串 * @return JSON对象 */
    public static JSONObject xmlToJson(String xmlStr) { 
    
    JSONObject result = new JSONObject(true);
    SAXReader xmlReader = new SAXReader();
    try { 
    
    Document document = xmlReader.read(new StringReader(xmlStr));
    Element element = document.getRootElement();
    return xmlToJson(element, result);
    } catch (Exception e) { 
    
    e.printStackTrace();
    }
    return result;
    }
    /** * XML文件转换JSON对象 * * @param file 文件路径 * @param node 选择节点 * @return JSON对象 */
    public static JSONObject xmlToJson(File file, String node) { 
    
    JSONObject result = new JSONObject(true);
    SAXReader xmlReader = new SAXReader();
    try { 
    
    Document document = xmlReader.read(file);
    Element element;
    if (StringUtils.isBlank(node)) { 
    
    element = document.getRootElement();
    } else { 
    
    element = (Element) document.selectSingleNode(node);
    }
    return xmlToJson(element, result);
    } catch (Exception e) { 
    
    e.printStackTrace();
    }
    return result;
    }
    public static void main(String[] args) { 
    
    System.out.println(xmlToJson(new File("C:\\Users\\如漩涡\\Desktop\\PAD\\1 用户登录验证.xml"), "Body/Response"));
    }
    }
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162472.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • TensorFlow版本与Python版本对应关系以及TensorFlow包的下载

    TensorFlow版本与Python版本对应关系以及TensorFlow包的下载下载地址:https://www.tensorflow.org/install/pip?lang=python2Anconda下Python2.7版本的TensorFlow的安装condacreate-ntfPython=2.7#创建2.7版本的环境condaactivatetf#激活创建的环境pipinstalltensorflow_gpu-1.12…

  • 这一次,终于系统的学习了 JVM 内存结构

    这一次,终于系统的学习了 JVM 内存结构最近在看《JAVA并发编程实践》这本书,里面涉及到了Java内存模型,通过Java内存模型顺理成章的来到的JVM内存结构,关于JVM内存结构的认知还停留在上大学那会的课堂上,一直没有系统的学习这一块的知识,所以这一次我把《深入理解Java虚拟机JVM高级特性与最佳实践》、《Java虚拟机规范JavaSE8版》这两本书中关于JVM内存结构的部分都看了一遍,算是…

  • a*算法最短路径_最长路径算法

    a*算法最短路径_最长路径算法#include#include#include#include#include#defineN1000#defineinf1<<30;usingnamespacestd;/* a星算法,找寻最短路径 算法核心:有两个表open表和close表 将方块添加到open列表中,该列表有最小的和值。且将这个方块称为S吧。 将S从open列表移除,然后添加

  • 键盘与计算机连接,罗技键盘怎么连接电脑?原来连接的方式这么简单!「建议收藏」

    键盘与计算机连接,罗技键盘怎么连接电脑?原来连接的方式这么简单!「建议收藏」现在科技的发展已经让我们拥有越来越方便电子的工具,他们在生活中会帮助我们更快捷方便的达到目的,可以说科技创造了新的生活与理念。很多人也都逐渐让自己的生活更加接近现代技术的发展,比如我们会通过在生活中购买很多的智能家居的方式,让自己感受科技的力量。其实除了智能家居,我们常使用的电脑就是一种非常智能和先进的科技。而与电脑相关的键盘也被开发的越来越智能和先进,我们的使用的可能过程可能就会存在很多的问题,…

    2022年10月16日
  • 大富豪3辅助器_加油站大亨作弊

    大富豪3辅助器_加油站大亨作弊   开心001最近新增加了一个功能:超级大亨,开始那几天没有外挂能进行操作,自己也很感兴趣,就动了编写一个外挂练习的念头。网上最早的一篇讲解开心网外挂的是http://www.turbozv.com/read.php/838.htm,写得很详细。   首先要分析下超级大亨的游戏赚钱手段:   1.每4小时登录本组件1次,将获得一定的资金奖励;   2.物品的市场价格会不断浮

  • java对象转换为json字符串_java中将字符串转换为json

    java对象转换为json字符串_java中将字符串转换为json概要Jackson是基于java平台的json处理框架。Jackson提供了三种可选的json处理方法:流式API、树模型、数据绑定(dataBinding),其中数据绑定是最常用的处理方式;本文主要介绍数据绑定的处理方式。java对象与json字符串互相转换java对象与json字符串互相转换的关键就是ObjectMapper对象的writeValue()方法和readValue()方法;其中json字符串可以字符串的形式传入/传出,也可以以文件的形式传入/传出,见wri.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号