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代码
- 引入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>
- 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")); } }
今天的文章Java XML解析工具类分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/29929.html