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 ...
随机推荐
- RevitAPI 隐藏UI读取Revit文件
1.1. 新建一个控制台项目 1.2. 添加Revit API引用 我们找到revit安装目录下的这两个DLL添加到项目引用中 RevitNET.dll RevitAPI.dll 修改属性:复制本地: ...
- location 优先级
###我只是个搬运工 规则 等号类型(=)的优先级最高.一旦匹配成功,则不再查找其他匹配项 前缀普通匹配(^~)优先级次之.不支持正则表达式.使用前缀匹配,如果有多个location匹配的话,则使用表 ...
- 2019-11-28:ssrf基础学习,笔记
ssrf服务端请求伪造ssrf是一种由恶意访问者构造形成由服务端发起请求的一个安全漏洞,一般情况下,ssrf访问的目标是从外网无法访问的内部系统,正式因为它是由服务端发起的,所以它能请求到它相连而外网 ...
- 2019-9-11:渗透测试,Kill远控软件,初接触
初步使用Kill远控软件,使win7靶机被远控 该文章仅供学习,利用方法来自网络文章,仅供参考 1,打开运行Kill,选择系统设置,设置监听端口,通讯密码,点击保存设置 2,点击服务生成,上线参 ...
- day20 异常处理
异常处理: 一.语法错误 二.逻辑错误 为什么要进行异常处理? python解释器执行程序时,检测到一个错误,出发异常,异常没有被处理的话,程序就在当前异常处终止,后面的代码不会运行 l = ['lo ...
- Java的 FileWriter类 和 FileReader类
一.FileReader类1,构造方法:FileReader fr = new FileReader(String fileName);//使用带有指定文件的String参数的构造方法.创建该输入流对 ...
- Rust 入门 (三)_下
这部分我们学习 rust 语言的 变量.数据类型.函数.注释.流程控制 这五个方面的内容.前文介绍了前两个内容,本文介绍后三个内容. 函数 函数在 rust 代码普遍存在,我们也已经见过了它的主函数 ...
- 关于jsp中jstl报错Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core
有的时候在开发jsp时,需要使用jstl时,在jsp上面引用jstl却出现错误:Can not find the tag library descriptor for "http://jav ...
- jsp中标签的序号问题
采用ststus.count进行序号的显示,但是设置了分页之后会出现点击下一页之后第二页的序号还是从1开始排序的,有时候并不方便,所以本文章针对带有分页的序号进行设置: <c:forEach i ...
- linux虚拟机中FTP本地用户模式配置流程
1.首先在自己虚拟机中安装vsftpd服务,可以先去yum中下载(当然你要有本地yum仓库) 输入命令: yum install vsftpd 下载完成之后打开vsftpd服务 输入命令:syst ...