Xml字符串转Map
说明:除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相关推荐
- java实现对象转换为map、xml字符串转化为map、map转化为xml字符串
全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现map使用功能函数:对象转换为map.xml字符串转化为map 1.将对象的所有属性转化为map键值对 2.转换对象为map,并忽略某 ...
- 【Groovy】自定义 Xml 生成器 BuilderSupport ( 构造 Xml 节点类 | 封装节点名称、节点值、节点属性、子节点 | 将封装的节点数据转为 Xml 字符串 )
文章目录 一.构造 Xml 节点类 1.封装节点名称.节点值.节点属性.子节点 2.将封装的节点数据转为 Xml 字符串 二.Xml 节点类完整代码 一.构造 Xml 节点类 生成 Xml 数据前 , ...
- xstream解析xml字符串和生成对象
一 目录 二 代码 1 Person.java package com.jn.xstream.bean;import java.util.ArrayList; import java.util.Has ...
- 框架选修课之dom4j解析xml字符串实例
DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...
- dom4j解析xml字符串实例
//先加入dom4j.jar包 import java.util.HashMap; import java.util.Iterator; import java.util.Map; import or ...
- 使用dom4j来解析xml文件或xml字符串
现有一个配置文件,需要解析出根节点与子节点,还有子节点下属性的信息.虽然w3c.dom规范亦可以解析,但这儿我们尝试使用dom4j的方式来解析. 涉及到的jar包有dom4j-1.6.1.jar xm ...
- Java解析XML字符串格式
Java解析XML字符串格式 前言 代码示例 结果展示 前言 java解析XML字符串格式使用的是Dom4j这一种方式; dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文 ...
- java dom解析xml字符串_dom4j解析xml字符串实例
java部分 DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文 ...
- Dom4j解析xml字符串
Dom4j解析xml字符串到List或JSON 通用代码 依赖jar import org.dom4j.Document; import org.dom4j.DocumentHelper; impor ...
最新文章
- 无意中发现了一位清华大佬的代码模版
- 产品经理这个岗位是否真的可有可无?
- linux常用命令解析
- 无符号数的算术四则运算中的各类单词的识别_文本反垃圾在花椒直播中的应用概述...
- centos7 时间设置
- 涉密专用服务器审计系统,国产专用服务器主机审计
- K8S_Google工作笔记0013---通过二进制方式_部署node节点_安装docker
- 白宫发布太空系统网络安全防护指令
- 使用oracle数据库和MySQL数据库时hibernate的映射文件.hbm.xml的不同
- go mod 几个常用命令
- flutter配置高德地图定位
- 抠图二重奏——人物头像
- 阵列卡直通模式和raid模式_详解磁盘阵列RAID原理、种类及性能优缺点
- (Oracle入门篇2)Oracle新增表字段,修改表字段,删除表字段
- 2020春节假期延长至正月初九(2月2日)
- 用正则表达式进行身份证验证
- mongodb获取具体某一天的查询语句
- shell语法中的空格和分号,引号
- vue系列教程之微商城项目|主页
- html表格美化模板,JavaScript + CSS 美化出的条纹表格样式