package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class XmlStr {

public static void main(String[] args) throws Exception {

String xmlStr = "<returnInfo><resultInfo><returnCode>SUC</returnCode><codeDesc>成功</codeDesc></resultInfo><routeInfo><maxRate>2048</maxRate></routeInfo></returnInfo>";
List<Map<String, String>> resultList = iterateWholeXML(xmlStr);

Map<String, String> retMap = new HashMap<String, String>();
for (int i = 0; i < resultList.size(); i++) {
Map map = (Map) resultList.get(i);

for (Iterator iterator = map.keySet().iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
retMap.put(key, (String) map.get(key));

}
}
System.out.println("reMap" + retMap);

}

/**
* 递归解析任意的xml 遍历每个节点和属性
*
* @param xmlStr
*/
public static List<Map<String, String>> iterateWholeXML(String xmlStr) {

List<Map<String, String>> list = new ArrayList<Map<String, String>>();

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<String, String>();
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();
System.out.println(attr);
if (attr == null)
continue;
String attrName = attr.getName();
System.out.println("attrname" + attrName);
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);
}
}
}

}

使用dom4j讲xml字符串递归遍历成Map的更多相关文章

  1. dom4j解析xml字符串实例

    DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...

  2. 使用dom4j生成xml字符串,以及解析xml字符串

    基于dom4j-1.6.1.jar import java.io.IOException; import java.io.StringWriter; import java.util.ArrayLis ...

  3. dom4j解析xml字符串

    import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.Docume ...

  4. java中使用axis发布和调用webService及dom4j解析xml字符串

    工作中需要调用webService服务,这里记录一下如何在java中发布和调用webService. 需要的jar包: webService服务端: import javax.jws.WebMetho ...

  5. dom4j操作xml

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件.是一个非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源工具.可以在这个 ...

  6. 使用Java解析XML文件或XML字符串的例子

    转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...

  7. json格式转换成Map的应用

    jsp 1.引用json.js(将json格式转换成字符串) 2. var name = document.getElementById("name").value; var re ...

  8. dom4j递归解析XML字符串所有子节点

    /** * dom4j递归解析所有子节点 * * @param childElements * @param mapEle * @return */ public Map<String, Obj ...

  9. java解析xml字符串(用dom4j)

    package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...

随机推荐

  1. 分布式锁与实现(二)——基于ZooKeeper实现

    引言 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提 ...

  2. JS判断当前手机类型

    window.onload = function () { var u = navigator.userAgent; if (u.indexOf('Android') > -1 || u.ind ...

  3. 我的开发环境搭建(ubuntu菜鸟)

    前段时间把系统换成了ubuntu,经过一段时间到发展,终于可以比较正常到完成开发工作了,但是就在今天,我的系统崩了,进不了桌面,而且终端里边到中文也显示乱码,尝试了网上说到各种方法无效,最终我决定重装 ...

  4. static 及 extern

    1.static 与 extern 对局部变量的作用 static 和extern 都是用来修饰变量(局部的static 实际也是全局的) static 修饰的变量 只有你的包含那个变量定义的源代码文 ...

  5. react native 升级到0.31.0的相关问题 mac Android Studio开发环境

    报错Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.facebook.re ...

  6. ubuntu16.04 编译运行 LSD-SLAM

    下载编译LSDSLAM,可能会出现 CreateGlutWindowAndWind is not a member of pangolin 以及 该函数参数报错的问题: 原因是在新的pangolin版 ...

  7. 在Windows上安装MongoDB

    原文官方文档:https://docs.mongodb.org/v2.6/tutorial/install-mongodb-on-windows/ 基于版本:MongoDB 2.6 概览 通过这个示例 ...

  8. Tomcat--安装与部署(一)

    一.Tomcat背景 自从JSP发布之后,推出了各式各样的JSP引擎.Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JS ...

  9. TCP协议简介

    1.TCP协议的特点 TCP是面向连接的运输层协议 每一条TCP连接只能有两个端点.TCP只能进行点对点通信 TCP提供可靠交付的服务.通过TCP连接传输的数据,无差错.不丢失.不重复.并且按序到达 ...

  10. 《Android进阶》之第一篇 在Java中调用C库函数

    在Java代码中通过JNI调用C函数的步骤如下: 第一步:编写Java代码 class HelloJNI{ native void printHello(); native void printStr ...