在与其他公司,尤其是国企项目(如公安系统,银保监等系统)对接接口时,对方经常要求入参或者返回参数需要传 XML 格式报文。

请求他们接口需要自己将参数拼接成XML格式,获取他们返回参数时,需要根据接口文档进行解析,然后处理。

本文以一个例子介绍如何解析响应的XML

1.引入依赖
maven项目可以在 pom.xml 里添加

<!-- XML 解析 -->
<dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version>
</dependency>
<dependency><groupId>jaxen</groupId><artifactId>jaxen</artifactId><version>1.1.6</version>
</dependency>

如果非Maven项目需要引入2个jar: dom4j-1.6.1.jar 和 jaxen-1.1.6.jar

  1. 解析XML demo
package com.example.demo.xml;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.util.*;
public class Demo {public static void main(String[] args) throws DocumentException {// XML解析demoString xmlString = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" +"<Packet type=\"RESPONSE\" version=\"1.0\">\n" +"    <Head>\n" +"        <errorCode>00000</errorCode>\n" +"        <errorMessage>成功</errorMessage>\n" +"    </Head>\n" +"    <Body>\n" +"        <ResInformation>\n" +"            <User>\n" +"                <id>1</id>\n" +"                <name>张三</name>\n" +"                <age>18</age>\n" +"                <sex>男</sex>\n" +"            </User>\n" +"            <User>\n" +"                <id>2</id>\n" +"                <name>李四</name>\n" +"                <age>20</age>\n" +"                <sex>女</sex>\n" +"            </User>\n" +"            <User>\n" +"                <id>3</id>\n" +"                <name>王五</name>\n" +"                <age>19</age>\n" +"                <sex>女</sex>\n" +"            </User>\n" +"            <School>\n" +"                <id>3</id>\n" +"                <province>广东省</province>\n" +"                <city>深圳市</city>\n" +"                <name>XXXX大学</name>\n" +"            </School>\n" +"        </ResInformation>\n" +"    </Body>\n" +"</Packet>\n";Document document = DocumentHelper.parseText(xmlString);List bodyInfoList = document.selectNodes("//Packet/Body/ResInformation");Iterator iterator = bodyInfoList.iterator();List<Map<String, Object>> userList = new ArrayList<>();Map<String, Object> school = new HashMap<>();while (iterator.hasNext()) {Element bodyInfoElement = (Element) iterator.next();// 解析 user,针对集合Iterator userIterator = bodyInfoElement.elementIterator("User");while (userIterator.hasNext()) {Map<String, Object> userMap = new HashMap<>();Element element = (Element) userIterator.next();userMap.put("id", getElementText(element, "id"));userMap.put("name", getElementText(element, "name"));userMap.put("age", getElementText(element, "age"));userMap.put("sex", getElementText(element, "sex"));userList.add(userMap);}// 解析 school,针对单个,对方文档已经说明了就是一个Iterator schoolIterator = bodyInfoElement.elementIterator("School");while (schoolIterator.hasNext()) {Map<String, Object> userMap = new HashMap<>();Element element = (Element) schoolIterator.next();school.put("id", getElementText(element, "id"));school.put("province", getElementText(element, "province"));school.put("city", getElementText(element, "city"));school.put("name", getElementText(element, "name"));}}System.out.println(userList);System.out.println(school);}/*** 功能描述:获取xml元素值** @param element* @param elementIteratorName* @return*/public static String getElementText(Element element, String elementIteratorName) {Iterator iterator = element.elementIterator(elementIteratorName);if (iterator.hasNext()) {Element subElement = (Element) iterator.next();return subElement.getText();}return null;}
}

输出结果为:

[{sex=男, name=张三, id=1, age=18}, {sex=女, name=李四, id=2, age=20}, {sex=女, name=王五, id=3, age=19}]

{province=广东省, city=深圳市, name=XXXX大学, id=3}

Java 解析 XML 报文示例相关推荐

  1. Java解析XML报文内容及标签属性

    前言 JSON格式的报文解析,虽然json串短小精悍,也能有效表达层次结构,但是每个元素只能找到对应的元素值,不能体现更丰富的样式特征.比如某个元素除了要传输它的字符串文本,还想传输该文本的类型.字体 ...

  2. java解析xml报文_java 如何解析http请求返回的xml报文

    xml报文解析方法有很多种,此处采用dom4j的方法. dom4j的jar包下载地址:https://dom4j.github.io/# 1.request.getInputStream()和new ...

  3. JAVA解析xml报文

    目录 问题需求 响应报文格式 1,开发导入的依赖 2,开发样例 3,测试结果 问题需求 在工作中此项目请求指定项目之后,项目会返回一个xml报文格式的响应,此时我需要判断返回的报文是否是成功的响应报文 ...

  4. java解析XML报文格式数据

    引入jar包: <!-- https://mvnrepository.com/artifact/org.dom4j/dom4j --> <dependency><grou ...

  5. java解析xml实例_在java中使用dom解析xml的示例分析

    本篇文章介绍了,在java中使用dom解析xml的示例分析.需要的朋友参考下 dom是个功能强大的解析工具,适用于小文档 为什么这么说呢?因为它会把整篇xml文档装载进内存中,形成一颗文档对象树 总之 ...

  6. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    http://blog.csdn.net/smcwwh/article/details/7183869 关键字:Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath ...

  7. Java 解析 XML

    Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...

  8. Java解析Xml的三种方式总结

    转自:http://blog.csdn.net/zjf280441589/article/details/50613881 XML解析技术有两种 DOM SAX DOM方式  根据XML的层级结构在内 ...

  9. Java解析XML字符串格式

    Java解析XML字符串格式 前言 代码示例 结果展示 前言 java解析XML字符串格式使用的是Dom4j这一种方式; dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文 ...

最新文章

  1. usaco Fence Loops
  2. 【计网】IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?
  3. oracle dba笔试,一个好资企业的的oracle DBA面试试题 大家来看看啊 把答案写下来 最好带注释 测试一下 了 最后30分散分 快来啊...
  4. python读写kafka集群(转载+自己验证)
  5. 正则表达式入门之重复匹配
  6. php 计时器microtime 以及去掉数组重复值array_unique
  7. 图像风格迁移_图像风格迁移—谷歌大脑团队任意图像风格化迁移论文详解
  8. canvas 插件_基于Angular的Canvas手写签名插件
  9. Golang——文件创建和写入、OpenFile追加写入、Open读取文件、ReadBytes缓冲区读取、os.Args、flag
  10. cs文件,外部类操作窗体控件
  11. format python value error_格式化计算变量时出现“ValueError:无效的格式说明符”
  12. Python 爬虫面试题 170 道:2019 版
  13. 路普达-区块链系统开发项目之DAPP
  14. Vue按需加载提升用户体验
  15. mysql56 配置内存_【mysql】mysql 内存配置调优
  16. 异步消息的传递-回调机制(转)
  17. IBM ServerGuide 8.42
  18. 【数据结构】栈和队列的异同
  19. android aoto未解锁,【求教】为什么我的解锁屏幕代码缺无法解锁屏幕
  20. A记录和CNAME记录有什么区别?

热门文章

  1. 如何用openCV识别人脸
  2. Linux压缩/解压命令
  3. dreamweaver的php框架,Dreamweaver设计网页框架集
  4. 上海开大计算机网考单选题,上海计算机一级考试选择题
  5. 一次服务器宕机的排查记录
  6. java代码设置布局的宽和高
  7. 【MAYA动画基础 2】Maya+AdvancedSkeleton蒙皮绑定
  8. 易车app买车怎么样
  9. TimeSpan转字符串
  10. Airbnb 规范大全