说明:除head、body节点合并为一个Map,其余的都进行List<Map>转换;

比如XML:

则节点<tran>为一个Map,VALUE为List<Map>,其中<rcd>节点不显示名称,具体代码如下:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;public class XmlUtils {
private static final String HEAD = "head";
private static final String BODY = "body";public static void main(String[] args) throws DocumentException {
String xml = "<ap>   <head>      <tr_code>330003</tr_code>      <corp_no>8000500436</corp_no>      <user_no>22222</user_no>      <req_no>123456789001</req_no>      <tr_acdt>20160510</tr_acdt>      <tr_time>151238</tr_time>      <atom_tr_count>1</atom_tr_count>      <channel>0</channel>      <reserved />   </head>   <body>      <cert_no>TEST01234</cert_no>      <pay_acno>310066865018010123060</pay_acno>      <type>S</type>      <sum>1</sum>      <sum_amt>0.01</sum_amt>      <pay_month>201605</pay_month>      <summary>测试0.01</summary>      <busi_no>3100012379</busi_no>      <selsec_flg>0</selsec_flg><tran><rcd><card_no>00000001</card_no><acname>测试账号</acname><card_flag>0</card_flag><amt>21.01</amt><busino>111111111</busino></rcd><rcd><card_no>00000001</card_no><acname>测试账号</acname><card_flag>0</card_flag><amt>21.01</amt><busino>111111111</busino></rcd></tran>   </body></ap>";
System.out.println(parseXmlStr(xml).toString());
}/**
* 解析XML字符串
*
* @param xml
* @return
* @throws DocumentException
*/
private static Map<String, Object> parseXmlStr(String xml)
throws DocumentException {
Document document = DocumentHelper.parseText(xml);
Element root = document.getRootElement();
return parseElement(root);
}/**
* 解析Element
*
* @param root
* @return
*/
@SuppressWarnings("unchecked")
private static Map<String, Object> parseElement(Element root) {
String rootName = root.getName();
Iterator<Element> rootItor = root.elementIterator();
Map<String, Object> rMap = new HashMap<>();
List<Map<String, Object>> rList = new ArrayList<>();
Map<String, Object> rsltMap = null;
while (rootItor.hasNext()) {
Element tmpElement = rootItor.next();
String name = tmpElement.getName();
if (rsltMap == null || (!HEAD.equals(name) && !BODY.equals(name)
&& !tmpElement.isTextOnly())) {
if (!HEAD.equals(name) && !BODY.equals(name)
&& !tmpElement.isTextOnly() && rsltMap != null) {
rList.add(rsltMap);
}
rsltMap = new HashMap<>();
}
if (!tmpElement.isTextOnly()) {
Iterator<Element> headItor = tmpElement.elementIterator();
while (headItor.hasNext()) {
Element hElement = headItor.next();
if (hElement.isTextOnly()) {
rsltMap.put(hElement.getName(), hElement.getTextTrim());
} else {
rsltMap.putAll(parseElement(hElement));
}
}
}
}
rList.add(rsltMap);
rMap.put(rootName, rList);
return rMap;
}}

测试结果:

{ap=[{summary=测试0.01, tr_time=151238, cert_no=TEST01234, channel=0, tr_code=330003, sum=1, type=S, pay_month=201605, req_no=123456789001, user_no=22222, tr_acdt=20160510, sum_amt=0.01, reserved=, atom_tr_count=1, pay_acno=310066865018010123060, busi_no=3100012379, corp_no=8000500436, selsec_flg=0, tran=[{acname=测试账号, card_no=00000001, card_flag=0, amt=21.01, busino=111111111}, {acname=测试账号, card_no=00000001, card_flag=0, amt=21.01, busino=111111111}]}]}

Xml字符串转Map相关推荐

  1. java实现对象转换为map、xml字符串转化为map、map转化为xml字符串

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现map使用功能函数:对象转换为map.xml字符串转化为map 1.将对象的所有属性转化为map键值对 2.转换对象为map,并忽略某 ...

  2. 【Groovy】自定义 Xml 生成器 BuilderSupport ( 构造 Xml 节点类 | 封装节点名称、节点值、节点属性、子节点 | 将封装的节点数据转为 Xml 字符串 )

    文章目录 一.构造 Xml 节点类 1.封装节点名称.节点值.节点属性.子节点 2.将封装的节点数据转为 Xml 字符串 二.Xml 节点类完整代码 一.构造 Xml 节点类 生成 Xml 数据前 , ...

  3. xstream解析xml字符串和生成对象

    一 目录 二 代码 1 Person.java package com.jn.xstream.bean;import java.util.ArrayList; import java.util.Has ...

  4. 框架选修课之dom4j解析xml字符串实例

    DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...

  5. dom4j解析xml字符串实例

    //先加入dom4j.jar包 import java.util.HashMap; import java.util.Iterator; import java.util.Map; import or ...

  6. 使用dom4j来解析xml文件或xml字符串

    现有一个配置文件,需要解析出根节点与子节点,还有子节点下属性的信息.虽然w3c.dom规范亦可以解析,但这儿我们尝试使用dom4j的方式来解析. 涉及到的jar包有dom4j-1.6.1.jar xm ...

  7. Java解析XML字符串格式

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

  8. java dom解析xml字符串_dom4j解析xml字符串实例

    java部分 DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文 ...

  9. Dom4j解析xml字符串

    Dom4j解析xml字符串到List或JSON 通用代码 依赖jar import org.dom4j.Document; import org.dom4j.DocumentHelper; impor ...

最新文章

  1. 无意中发现了一位清华大佬的代码模版
  2. 产品经理这个岗位是否真的可有可无?
  3. linux常用命令解析
  4. 无符号数的算术四则运算中的各类单词的识别_文本反垃圾在花椒直播中的应用概述...
  5. centos7 时间设置
  6. 涉密专用服务器审计系统,国产专用服务器主机审计
  7. K8S_Google工作笔记0013---通过二进制方式_部署node节点_安装docker
  8. 白宫发布太空系统网络安全防护指令
  9. 使用oracle数据库和MySQL数据库时hibernate的映射文件.hbm.xml的不同
  10. go mod 几个常用命令
  11. flutter配置高德地图定位
  12. 抠图二重奏——人物头像
  13. 阵列卡直通模式和raid模式_详解磁盘阵列RAID原理、种类及性能优缺点
  14. (Oracle入门篇2)Oracle新增表字段,修改表字段,删除表字段
  15. 2020春节假期延长至正月初九(2月2日)
  16. 用正则表达式进行身份证验证
  17. mongodb获取具体某一天的查询语句
  18. shell语法中的空格和分号,引号
  19. vue系列教程之微商城项目|主页
  20. html表格美化模板,JavaScript + CSS 美化出的条纹表格样式

热门文章

  1. 声学的一些基本知识(1)
  2. iOS主线程卡顿监测
  3. MD5 标准算法详解
  4. Spring5基础知识
  5. Latex、如何将word中的表格转换为Latex代码
  6. 国内PHP开源建站程序
  7. 解决服务器挖矿漏洞 crypto
  8. 计算机的问卷调查的题目,新颖的调查问卷的题目
  9. 实例:输入一个时间值s,它是距离当日午夜的秒值,计算目前的时间,时间按00:00:00格式输出
  10. 杭州再发力!余杭又添一区块链产业园,携手巴比特欲打造创新应用示范区