java知识点:dom4j 由map转字符串

map.toString()是这样子的~

{welcome-file-list={welcome-file=[index.html, {a=[{b=[{c=[c1c1c1c1c1c1, c2c2c2c2c2c2]}, b2b2b2b2]}, 22222, 33333]}, index.jsp, default.html, default.htm, default.jsp]}, display-name=ask-ssh, context-param={param-value=classpath:applicationContext.xml, param-name=contextConfigLocation},
filter-mapping={url-pattern=/*, filter-name=struts2}, listener={listener-class=org.springframework.web.context.ContextLoaderListener}, filter={filter-class=org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter, filter-name=struts2}}

观察发现,由map 套 list 套 map

思路:

  1. 遍历map
  2. 判断 value 是否是一个Map
  3. 判断 value 是否是一个List
  4. 判断List中是否有Map
  5. 递归

需要注意的是:在每个循环开始和结尾都需要加上 sb.append("<" + key + ">"); sb.append("</" + key + ">");

而中间是否要放值,取决于你是Map?是List?是String? 只有String才放值

	public static String map2Dom(Map<String, Object> map) {
		// iterator法,遍历map
		Iterator keyIterator = map.keySet().iterator();
		StringBuffer sb = new StringBuffer();

		while (keyIterator.hasNext()) {
			String key = (String) keyIterator.next();
			Object value = map.get(key);

			// 如果value是map则调用map2Dom
			if ("java.util.HashMap".equals(value.getClass().getName())) {
				mapAppend(sb, key, value);
			} else {
				// 不是map,判断是否是list
				if ("java.util.ArrayList".equals(value.getClass().getName())) {
					for (Object tmpObject : (List) value) {
						// 如果是map,则调用map2Dom
						// 此时就变成一开始的样子了`~~
						if ("java.util.HashMap".equals(tmpObject.getClass()
								.getName())) {
							mapAppend(sb, key, tmpObject);
						} else {
							// "java.lang.String"
							stringAppend(sb, key, tmpObject);
						}
					}
				} else {
					stringAppend(sb, key, value);
				}
			}
		}
		return sb.toString();
	}

    private static void stringAppend(StringBuffer sb, String key,
            Object tmpObject) {
        sb.append("<" + key + ">");
        sb.append(tmpObject);
        sb.append("</" + key + ">");
    }

    private static void mapAppend(StringBuffer sb, String key, Object tmpObject) {
        sb.append("<" + key + ">");
        sb.append(map2Dom((Map<String, Object>) tmpObject));
        sb.append("</" + key + ">");
    }
时间: 2024-08-04 19:43:51

java知识点:dom4j 由map转字符串的相关文章

JAVA用dom4j对xml的解析

一.DOM4j中,获得Document对象的方式有三种: [java] view plain copy 1.读取XML文件,获得document对象 SAXReader reader = new SAXReader(); Document   document = reader.read(new File("csdn.xml")); 2.解析XML形式的文本,得到document对象. String text = "<csdn></csdn>"

Java 集合系列 08 Map架构

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列 05 Vector详细介绍(源码解析)和使用示例 Java 集合系列 06 Stack详细介绍(源码解析)和使用示例 Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和

给Java新手的一些建议——Java知识点归纳(Java基础部分)

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

给Java新手的一些建议----Java知识点归纳(Java基础部分)

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

给Java新手的一些建议----Java知识点归纳(J2EE and Web 部分)

J2EE(Java2 Enterprise Edition) 刚出现时一般会用于开发企业内部的应用系统,特别是web应用,所以渐渐,有些人就会把J2EE和web模式画上了等号.但是其实 J2EE 里面并不仅仅是web,可以看到很多其中的规范都是通用的,目的是为了高效开发出健壮的服务企业业务模式的应用系统.J2EE中也是可以没有web界面的应用,而现在面向大众用户开发的网站往往也会使用到很多的J2EE的技术,所以J2EE和web开发的概念都是融合在了一起了. 我本人在JAVA开发刚入行的时候,也是

java中将list、map对象写入文件

链接地址:http://blog.sina.com.cn/s/blog_4a4f9fb50101p6jv.html 推荐:凤爪女瓜子男怪象该谁反思伦敦房价为什么持续暴涨 × wvqusrtg个人中心发博文消息 doudouhe的博客 http://blog.sina.com.cn/dechuan608hewei [订阅][手机订阅] 首页博文目录图片关于我 个人资料 doudouhe 微博 加好友发纸条 写留言加关注 博客等级: 博客积分:842 博客访问:222,144 关注人气:34 获赠金

15个易遗忘的java知识点

1.java中的基本数据类型以及所占内存大小 (1)整形 byte 1字节 short 2字节 int 4字节 long 8字节 (2)浮点型 float 4字节 double 8字节 (3)字符类型 char 2字节(Unicode-16) (4)布尔类型 布尔类型boolean比较特殊,尽管Java虚拟机定义了boolean类型,但虚拟机对boolean类型的支持是有限的,没有为boolean值单独设计JVM指令.操作布尔值的表达式在编译之后,它使用的是JVM的int数据类型,也就是占用4个

java知识点梳理

网络搜索结果,出处不详,仅供参考 对于刚刚接触Java的人,java基础知识技术点繁多,那么gkstk小编为大家汇总最全java知识点如下,仅供大家参考学习! 1. JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可.不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的. JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透.我在面试有超过3年J

软件测试第二次作业 - 写一个Java程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。

题目一: 1. 写一个Java程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示.(单词之间用空格隔开,如“Hello World My First Unit Test”): 2. 编写单元测试进行测试: 3. 用ElcEmma查看代码覆盖率,要求覆盖率达到100%. Demo类: 1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 import java.