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"));
    	}
    
    }
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java dump分析工具_java线程dump分析工具

    java dump分析工具_java线程dump分析工具一、【内存dump】jmap–dump:live,format=b,file=heap.bin二、【线程dump】jstack是java虚拟机自带的一种堆栈跟踪工具。基本介绍:jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间…

    2022年10月2日
    2
  • 让你的网页更精彩 – Javascript 调用MSAgent

    让你的网页更精彩 – Javascript 调用MSAgent<!–让你的网页更精彩–MicrosoftAgent在网页上的简单应用(本文假设您使用WindowsXP或Windows2000操作系统)不知在你漫游互联网时可曾在他开某个网页时看到一个小巫师,蓝色的袍子上满是金黄的星星和月亮十分可爱。他会向你问好,给你介绍这个网站。你一定奇怪,那个巫师是怎么做出来的。其实他并不是网页实现的而是微软的一…

    2022年6月16日
    22
  • uint32-t_c语言uint32_t类型

    uint32-t_c语言uint32_t类型uint32_tu:代表unsigned即无符号,即定义的变量不能为负数;int:代表类型为int整形;32:代表四个字节,即为int类型;_t:代表用typedef定义的;整体代表:用typedef定义的无符号int型宏定义;uint8_t:u:代表unsigned即无符号,即定义的变量不能为负数;int:代表类型为int整形;8:代表一个字节…

    2022年9月7日
    3
  • 雷达系统导论_雷达信号处理基础第二版

    雷达系统导论_雷达信号处理基础第二版1.3.3接收机单个散射体的回波波形具有下面的形式:其中,幅度调制A(t)仅仅表示脉冲的包络。接收机处理的主要功能是将雷达信号中承载信息的部分变换到基带,目的是测量。接收机的信号被分到两个通道。为同相“I”通道,在这个通道中接收信号和振荡器(本振)的信号进行混频。这个混频产生了和频和差…

    2022年10月21日
    2
  • c语言 windows多线程_C语言 多线程

    c语言 windows多线程_C语言 多线程_beginThreadex创建多线程解读一、需要的头文件支持 #include         //for_beginthread()需要的设置:ProjectàSetting–>C/C++–>Userrun-timelibrary选择DebugMultithreaded或者Multithreaded。即使用:MT或MTD。二、解释

    2022年10月7日
    2
  • HDP kt_renewer ERROR Couldn‘t renew kerberos ticket in order to work around Kerberos 1.8.1 issu

    HDP kt_renewer ERROR Couldn‘t renew kerberos ticket in order to work around Kerberos 1.8.1 issu完整报错:kt_renewerERRORCouldn’trenewkerberosticketinordertoworkaroundKerberos1.8.1issue.Pleasecheckthattheticketfor’hue/client-v01.16899.com@16899.COM’isstillrenewable:

    2025年7月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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