前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java XML解析工具类

Java XML解析工具类

作者头像
全栈程序员站长
发布2022-09-16 12:47:25
1.2K0
发布2022-09-16 12:47:25
举报
文章被收录于专栏:全栈程序员必看

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

Java XML解析工具

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

1. 看看XML

代码语言:javascript
复制
<?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代码

引入pom

代码语言:javascript
复制
<!--解析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>

Java

代码语言:javascript
复制
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.cn/162472.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java XML解析工具类
    • 1. 看看XML
      • 2. 看看Java代码
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档