import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;

public class ParseXml {

/**
* xml转换成TreeMap
* @param xml
* @return
*/
public static Map<String, Object> xmlToTreeMap(String xml) {
Map<String, Object> map = new TreeMap<String, Object>();
try {
if (xml == null || "".equals(xml.replaceAll(" ", ""))) {
return null;
} else {
Document doc = (new SAXBuilder()).build(new StringReader(xml));
Element element = doc.getRootElement();
if (element == null) {
throw new Exception("XML包格式错误:没有根元素");
}
List it = element.getChildren();
int len = it.size();
if (len == 0) {
throw new Exception("XML包格式错误:没有子元素");
}
map = new TreeMap<String, Object>();
for (int i = 0; i < len; i++) {
Element subelement = (Element) it.get(i);
List itc = subelement.getChildren();
if (itc != null && itc.size() > 0) {
for (int n = 0; n < itc.size(); n++) {
Element sub = (Element) itc.get(n);
map.put(sub.getName().toLowerCase(), sub.getText());
}
}
map.put(subelement.getName().toLowerCase(), subelement.getText());
}
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return map;
}

/**
* xml转换成HashMap
*
* @param xml
* @return
*/
public static Map<String, Object> xmlToHashMap(String xml) {
Map<String, Object> map = new HashMap<String, Object>();
try {
if (xml == null || "".equals(xml.replaceAll(" ", ""))) {
return null;
} else {
Document doc = (new SAXBuilder()).build(new StringReader(xml));
Element element = doc.getRootElement();
if (element == null) {
throw new Exception("XML包格式错误:没有根元素");
}
List it = element.getChildren();
int len = it.size();
if (len == 0) {
throw new Exception("XML包格式错误:没有子元素");
}
map = new HashMap<String, Object>();
for (int i = 0; i < len; i++) {
Element subelement = (Element) it.get(i);
List itc = subelement.getChildren();
if (itc != null && itc.size() > 0) {
for (int n = 0; n < itc.size(); n++) {
Element sub = (Element) itc.get(n);
map.put(sub.getName().toLowerCase(), sub.getText());
}
}
map.put(subelement.getName().toLowerCase(), subelement.getText());
}
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return map;
}

/**
* @Title: parseXmlToListMap
* @Description: xml转listmap
* @param @param xml
* @param @return
* @return List<Map> 返回类型
* @throws
*/
@SuppressWarnings("unchecked")
public static List<Map<String, Object>> parseXmlToListMap(String xml) {
List<Map<String, Object>> argMapList = new ArrayList<Map<String, Object>>();
Map<String, Object> retMap = new HashMap<String, Object>();
try {
StringReader read = new StringReader(xml);
// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
// 创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
// 通过输入源构造一个Document
Document doc = (Document) sb.build(source);
Element root = doc.getRootElement();// 指向根节点
if(root != null){
List<Element> es = root.getChildren();
if (es != null && es.size() != 0) {
for (Element element : es) {
retMap.put(element.getName(), element.getText());
}
}
}
argMapList.add(retMap);
} catch (Exception e) {
e.printStackTrace();
}
return argMapList;
}

public static void main(String[] args) {
String xml = "<xml><code><![CDATA[code]]></code><msg><![CDATA[msg]]></msg><responseId>12345678</responseId></xml>";
System.out.println(parseXmlToListMap(xml).get(0));
}

}

xml转换成map的更多相关文章

  1. Dom4j把xml转换成Map(固定格式)

    /** * 可解析list * * @param fileName * @return * @throws Exception */ @SuppressWarnings("unchecked ...

  2. Dom4j把xml转换成Map(非固定格式)

    将xml转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.转换规则:1.主要是Map与List的互相嵌套2.同名称的节点会被装进List 示例: import java.util. ...

  3. 如何在ASP.NET中用C#将XML转换成JSON

    本文旨在介绍如果通过C#将获取到的XML文档转换成对应的JSON格式字符串,然后将其输出到页面前端,以供JavaScript代码解析使用.或许你可以直接利用JavaScript代码通过Ajax的方式来 ...

  4. Properties 转换成Map

    转自:http://feitianbenyue.iteye.com/blog/1759259 对于Properties 转换成Map 的问题: 第一时间想到的肯定有以下: 1.  迭代出来  再 pu ...

  5. 如何在ASP.NET中用C#将XML转换成JSON 【转】

      本文旨在介绍如果通过C#将获取到的XML文档转换成对应的JSON格式字符串,然后将其输出到页面前端,以供JavaScript代码解析使用.或许你可以直接利用JavaScript代码通过Ajax的方 ...

  6. 分享非常有用的Java程序 (关键代码)(五)---把 Array 转换成 Map

    原文:分享非常有用的Java程序 (关键代码)(五)---把 Array 转换成 Map import java.util.Map; import org.apache.commons.lang.Ar ...

  7. C#将XML转换成JSON转换XML

    原文:C#将XML转换成JSON转换XML using System; using System.Collections.Generic; using System.Linq; using Syste ...

  8. 将Object对象转换成Map 属性名和值的形式

    将Java对象转换成Map的键值对形式 代码: package cn.lonelcoud.util; import com.sun.deploy.util.StringUtils; import ja ...

  9. C#将XML转换成JSON 使用 JavaScript 将 XML 转成 JSON

    如何在ASP.NET中用C#将XML转换成JSON [JavaScript]代码 // Changes XML to JSON function xmlToJson(xml) { // Create ...

随机推荐

  1. Oracle 提示符

    http://blog.csdn.net/wyzxg/article/details/5647905

  2. tidb 记录文档

    ansible-playbook stop.yml   / start.yml 重启集群,在ansible目录下执行 SHOW STATS_META; 查看统计信息 重启集群:ansible-play ...

  3. s12-day01-work01用户登录接口

    README # README.md # day001-work-1 @南非波波 功能实现:登录接口 流程图: ![](http://i.imgur.com/61eFd0u.jpg) 程序实现: 1. ...

  4. 【51nod】1312 最大异或和

    题解 很显然我们求出一组线性基来,如果有M个基,那么可以构造N - M + 1个最大异或值 而对于线性基中的元素,除了最大的元素,我们用最大异或值异或掉每个元素累加进答案 而不是把线性基中的元素处理成 ...

  5. 易普优APS与国外知名高级计划排程系统对比

    众所周知软件执行效率受制于硬件性能,市面上的APS产品多为单机版本,企业要应用好APS,保证紧急插单.计划下发全程无忧,用户电脑硬件性能是不容忽视的一大瓶颈.APS的直接用户是车间管理人员.计划员,而 ...

  6. 2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest B - Byteland Trip dp

    B - Byteland Trip 题目大意:给你一个由'<' 和 '>'组成的串, 如果在'<' 只能前往编号比它小的任意点, 反之只能前往比它大的任意点,问你能遍历所有点 并且每 ...

  7. 收集Nginx的json格式日志(五)

    一.配置nginx [root@linux-node1 ~]# vim /etc/nginx/nginx.conf #修改日志格式为json格式,并创建一个nginxweb的网站目录 log_form ...

  8. Hive分区和桶的概念

    Hive 已是目前业界最为通用.廉价的构建大数据时代数据仓库的解决方案了,虽然也有 Impala 等后起之秀,但目前从功能.稳定性等方面来说,Hive 的地位尚不可撼动. 其实这篇博文主要是想聊聊 S ...

  9. QString::arg()//用字符串变量参数依次替代字符串中最小数值

    QString i = "iTest";           // current file's number QString total = "totalTest&qu ...

  10. [js]正则篇

    一.正则基本概念 1.一种规则.模式.文本处理工具 2.强大的字符串匹配工具 3.在js中常与字符串函数配合使用 二.js正则写法 正则在js中以正则对象存在: (1)var re=new RegEx ...