XML字符串转为Map集合
public class xmlToMapUtils {
/**
* xml字符串转为map集合
* @param xmlStr
* @return
*/
public static Map<String, Object> xmlToMap(String xmlStr){
List<Map<String, String>> resultList = iterateWholeXML(xmlStr);
Map<String, Object> retMap = new HashMap<String, Object>();
for (int i = 0; i < resultList.size(); i++) {
Map<String,Object> map = (Map)resultList.get(i);
for (Iterator iterator = map.keySet().iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
retMap.put(key, map.get(key));
}
}
return retMap;
}
/**
* 递归解析任意的xml 遍历每个节点和属性
*
* @param xmlStr
*/
private static List<Map<String, String>> iterateWholeXML(String xmlStr) {
List<Map<String, String>> list = new ArrayList();
try {
Document document = DocumentHelper.parseText(xmlStr);
Element root = document.getRootElement();
recursiveNode(root, list);
return list;
} catch (DocumentException e) {
e.printStackTrace();
}
return null;
}
/**
* 递归遍历所有的节点获得对应的值
*
* @param
*/
private static void recursiveNode(Element root, List<Map<String, String>> list) {
// 遍历根结点的所有孩子节点
HashMap<String, String> map = new HashMap();
for (Iterator iter = root.elementIterator(); iter.hasNext();) {
Element element = (Element) iter.next();
if (element == null)
continue;
// 获取属性和它的值
for (Iterator attrs = element.attributeIterator(); attrs.hasNext();) {
Attribute attr = (Attribute) attrs.next();
if (attr == null)
continue;
String attrName = attr.getName();
String attrValue = attr.getValue();
map.put(attrName, attrValue);
}
// 如果有PCDATA,则直接提出
if (element.isTextOnly()) {
String innerName = element.getName();
String innerValue = element.getText();
map.put(innerName, innerValue);
list.add(map);
} else {
// 递归调用
recursiveNode(element, list);
}
}
}
/**
* 测试
*/
public static void main(String[] args) {
String xmlStr = "<?xml version='1.0' encoding='UTF-8'?><OPERATION><HEAD><TIMESTAMP>20190621173338</TIMESTAMP><LOCATION>SHANGHAI</LOCATION></HEAD><BODY><OPERATORID>admin</OPERATORID><OPERATORIP>127.0.0.1</OPERATORIP><USERINFO><USERID>1</USERID><USERNAME>zhangsan</USERNAME><PASSWORD>123456</PASSWORD><MOBILE>11111111111</MOBILE></USERINFO></BODY></OPERATION>";
Map<String, Object> xmlToMap = xmlToMap(xmlStr);
Set<Map.Entry<String,Object>> entrySet = xmlToMap.entrySet();
for (Map.Entry<String, Object> entry : entrySet) {
System.out.println(entry.getKey()+"---"+entry.getValue());
}
}
}
结果如下:

XML字符串转为Map集合的更多相关文章
- XML字符串转为Map
import java.io.ByteArrayInputStream; import java.io.UnsupportedEncodingException;import java.util.Ha ...
- json数据转为Map集合
我是利用Gson来弄得Gson gson = new Gson();//显得出HashMap的类型Type type = new TypeToken<HashMap<String, Str ...
- xml格式字符串转为Map
import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom ...
- Json字符串转map集合
第一步:在pom.xml中添加依赖; <dependency> <groupId>com.alibaba</groupId> <artifactId>f ...
- ASP.NET中把xml转为dataset与xml字符串转为dataset及dataset转为xml的代码
转自:http://www.cnblogs.com/_zjl/archive/2011/04/08/2009087.html XmlDatasetConvert.csusing System;usin ...
- xml字符串转为XmlDocument
string xml = "<xml><logistics_express_get_respose><express_detail><company ...
- java字符串转为Map类型:split()方法的应用
方法一: package com.thinkgem.jeesite.modules.socketTest.demo2; import java.util.HashMap; import java.ut ...
- javascript xml字符串转为json对象
var xmlStr = '<?xml version="1.0" encoding="utf-8" ?><config><nam ...
- Json格式String类型字符串转为Map工具类
package agriculture_implement.util; import com.google.gson.Gson; import com.google.gson.JsonSyntaxEx ...
随机推荐
- C# 根据字符串生成二维码
1.先下载NuGet包(ZXing.Net) 2.新建控制器及编写后台代码 using System; using System.Collections.Generic; using System.D ...
- Android 获取 SHA1值3步完成
未经允许,禁止
- SQL语句总结基础篇
创建数据库 CREATE DATABASE 数据库名称; 删除数据库 DROP DATABASE 数据库名称; 创建新表 create table 表名(列 类型 ,列 类型 ,..); 根据已有的表 ...
- 前端工具-定制ESLint 插件以及了解ESLint的运行原理
这篇文章目的是介绍如何创建一个ESLint插件和创建一个ESLint rule,用以帮助我们更深入的理解ESLint的运行原理,并且在有必要时可以根据需求创建出一个完美满足自己需求的Lint规则. 插 ...
- 使用 SecureRandom 产生随机数采坑记录
公众号「码海」欢迎关注 背景 我们的项目工程里经常在每个函数需要用到 Random 的地方定义一下 Random 变量(如下) public void doSomethingCommon() { Ra ...
- #华为云·寻找黑马程序员#【代码重构之路】如何“消除”if/else
1. 背景 if/else是高级编程语言中最基础的功能,虽然 if/else 是必须的,但滥用 if/else,特别是各种大量的if/else嵌套,会对代码的可读性.可维护性造成很大伤害,对于阅读代码 ...
- 华为eNSP路由交换-静态路由
静态路由 一. 静态路由及默认路由基本配置 1.1实验内容 在由三台路由器所组成的简单网络中,R1和R3各连着一台PC,现在要求能够实现PC-1和PC-2之间的通信.本实验将通过配置基本的静态路由和默 ...
- 使用@media实现移动端使用@2x,@3x切换
/*dpr比值为1的css代码 */ div{ width:300px; height:200px; background:url(img/button@1x.png) ; } /* dpr比值为 ...
- ios中陀螺仪CoreMotion的用法
转自:http://code.eoe.cn/471/title/ios涓檧铻轰华CoreMotion鐨勭敤娉 README.md 外部引用 原始文档 以前在iphone中要得到加速度时,只能使用Ac ...
- 如何在ASP.NET Core 中快速构建PDF文档
比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间. 在本 ...