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. kafka基本版与kafka acl版性能对比(单机版)

    一.场景 线上已经有kafka集群,服务运行稳定.但是因为产品升级,需要对kakfa做安全测试,也就是权限验证. 但是增加权限验证,会不会对性能有影响呢?影响大吗?不知道呀! 因此,本文就此来做一下对 ...

  2. linux nc命令使用详解(转)

    linux nc命令使用详解 功能说明:功能强大的网络工具 语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o& ...

  3. drools7 (二、agenda-group 的使用)

    几个关键点: 1. 如果没有指定agenda-group 则默认把所有未指定agenda-group的 rules 都执行一遍 2. 如果指定了agenda-group 使用的时候必须指定该name才 ...

  4. spring boot之使用通用Mapper批量添加数据

    通用Mapper是一款针对mybatis进行扩展的轻量级组件,使用起来非常方便.当调用其针对mysql进行批量添加数据的方法时,发现报错,仔细研究了一番,发现是在使用通用Mapper上出现了问题.下面 ...

  5. Codeforces Round #239 (Div. 1) 二项式差分

    C - Curious Array 思路:对于区间[l, r]每个数加上C(i - l + k, k), 可以在l处+1, 在r+1处-1, 然后做k+1次求前缀和操作,然后就可以写啦. 然后逐层求前 ...

  6. sqoop遇到的问题

    我使用的是CDH版本的 这是我的sqoop脚本 sudo -u hive sqoop import --connect jdbc:mysql://xxxx/rom3 --username xxx -- ...

  7. poj1251 Jungle Roads(Prime || Kruskal)

    题目链接 http://poj.org/problem?id=1251 题意 有n个村庄,村庄之间有道路连接,求一条最短的路径能够连接起所有村庄,输出这条最短路径的长度. 思路 最小生成树问题,使用普 ...

  8. Ionic Js一:上拉菜单(ActionSheet)

    上拉菜单(ActionSheet)通过往上弹出的框,来让用户选择选项. 非常危险的选项会以高亮的红色来让人第一时间识别.你可以通过点击取消按钮或者点击空白的地方来让它消失. HTML 代码 <b ...

  9. 计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational 南昌邀请赛网络赛)

    Distance on the tree DSM(Data Structure Master) once learned about tree when he was preparing for NO ...

  10. 【运维实战】一次linux日志分割之路——将日志按照每小时进行分割,并按照“日期-小时”格式保存

    是这样的,现在需要对nginx的access.log进行按照每小时进行分割,并且最好还要能够以 “日期+时间”的形式,命名保存. 两点,一个是按照每小时进行分割,一个是将日志以“日期+时间”的形式进行 ...