import org.dom4j.Document;

import org.dom4j.DocumentHelper;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import java.util.*;

/**

* Created by IntelliJ IDEA.

* User: leizhimin

* Date: 2008-4-14 14:02:12

* Note: Java递归遍历XML所有元素

*/

public class XmlTest {

//    private static Map xmlmap = new HashMap();

//存储xml元素信息的容器

private static List elemList = new ArrayList();

//要测试的xml对象

private static String srcXml = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" +

"\n" +

"    \n" +

"        某人\n" +

"                    \n" +

"            \n" +

"                10002\n" +

"                西安市太白路\n" +

"            \n" +

"            \n" +

"                10002\n" +

"                空ID节点啊\n" +

"            \n" +

"            \n" +

"                10002\n" +

"                空ID节点啊\n" +

"            \n" +

"\t\t\t\n" +

"\t\t\t\t\n" +

"                西安市太白路2\n" +

"            \n" +

"\t\t\n" +

"    \n" +

"    \n" +

"        ASDF\n" +

"    \n" +

"";

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

XmlTest test = new XmlTest();

Element root = test.getRootElement();

test.getElementList(root);

String x = test.getListString(elemList);

System.out.println("-----------原xml内容------------");

System.out.println(srcXml);

System.out.println("-----------解析结果------------");

System.out.println(x);

}

/**

* 获取根元素

*

* @return

* @throws DocumentException

*/

public Element getRootElement() throws DocumentException {

Document srcdoc = DocumentHelper.parseText(srcXml);

Element elem = srcdoc.getRootElement();

return elem;

}

/**

* 递归遍历方法

*

* @param element

*/

public void getElementList(Element element) {

List elements = element.elements();

if (elements.size() == 0) {

//没有子元素

String xpath = element.getPath();

String value = element.getTextTrim();

elemList.add(new Leaf(xpath, value));

} else {

//有子元素

for (Iterator it = elements.iterator(); it.hasNext();) {

Element elem = (Element) it.next();

//递归遍历

getElementList(elem);

}

}

}

public String getListString(List elemList) {

StringBuffer sb = new StringBuffer();

for (Iterator it = elemList.iterator(); it.hasNext();) {

Leaf leaf = it.next();

sb.append(leaf.getXpath()).append(" = ").append(leaf.getValue()).append("\n");

}

return sb.toString();

}

}

/**

* xml节点数据结构

*/

class Leaf {

private String xpath;         //

private String value;

public Leaf(String xpath, String value) {

this.xpath = xpath;

this.value = value;

}

public String getXpath() {

return xpath;

}

public void setXpath(String xpath) {

this.xpath = xpath;

}

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

}

java xml 递归_Java递归遍历XML所有元素相关推荐

  1. java xml 合并_Java中合并XML文档的设计与实现

    为了读写XML文件,需要导入如下JAVA包,"//"后为注释说明,笔者的环境是JDK1.3.1,在JDK 1.4.0中测试也通过. Import java.io. *; //Jav ...

  2. java bean与xml转换_Java Bean与xml互相转换的方法分析

    本文实例讲述了Java Bean与xml互相转换的方法.分享给大家供大家参考,具体如下: XML和Java Bean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦.下面介 ...

  3. java 解析xml 对象_Java反射——读取XML文件,创建对象

    读取XML文件,创建对象 config.xml import java.io.*; import java.lang.reflect.Constructor; import javax.xml.par ...

  4. java反射 创建对象_Java反射――读取XML文件,创建对象

    config.xml <?xml version="1.0" encoding="UTF-8"?> import java.io.*; import ...

  5. java 判断对象是否是xml格式_java对象与xml格式之间的转换

    java对象是可以直接与xml相互转换的,但需要导入包:xstream-1.3.1.jar,在创建对象的时候,注意一定要new一个DomDriver: 成功的测试代码如下: package com.x ...

  6. java构建xml参数_Java中使用XML创建EMAIL模板

    邮件模板 让我们来看看邮件模板的格式.模板是XML文件,它包含一个根元素和一系列根的子元素.根元素是.必要的子元素是, , 和 .可选的子元素是 , , 和 .如果你使用过邮件系统,那么你可以推导出这 ...

  7. java 文件 递归_JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  8. java xml 学习_java学习(四)xml

    1.xml文件 xml(可扩展标签语言,标签自定义,用来存储数据以及配置文件).书写规范为: 1)区分大小写: 2)应该有一个跟标签: 3)标签必须关闭:如 4)属性必须用引号引起来:如: 5)标签体 ...

  9. 扫描java类文件_java递归与非递归实现扫描文件夹下文件的实例代码

    java递归与非递归实现扫描文件夹下所有文件 java扫描指定文件夹下面的所有文件,供大家参考,具体内容如下 扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种 ...

最新文章

  1. 《因果学习周刊》第6期:因果推荐系统
  2. 解决无法安装cnpm,cnpm卡顿问题
  3. 极力推荐5款我一直在使用的Chrome优秀插件!
  4. 基本的EJB参考,注入和查找
  5. 无线业务需求的线路设计以及拓扑图实现
  6. php数据库删除数据,php数据库删除数据的简单示例
  7. 信息学奥赛一本通C++语言——1025:保留12位小数的浮点数
  8. scrapy模拟登陆人人网
  9. 异步线程AsyncTask_2示例(07)
  10. Web开发面临的挑战主要有哪些?
  11. 微信小程序中使用tabBar
  12. 卡西欧计算机做英语,卡西欧的这个小萌物 原来是台英语学习机
  13. Snappy Ubuntu Core 登陆 Bubblegum-96 单板机
  14. VS2015中更改项目名称
  15. 日记侠:如何用手机月入万元,只需从这5步开始
  16. JPA 查询 未查询到时返回的list的size为0 但是引用并不为空
  17. Altium Designer 18中的Violations Associated with Components
  18. 二分幂,快速幂,矩阵快速幂,快速乘
  19. 我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  20. 淘宝二手优必选舵机保姆级驱动教程,看不懂来打我(自行修改ID,有HAL库驱动函数)

热门文章

  1. 【pyqt5】——入门级模板(ui文件+ui转py文件+逻辑py文件)(消息提示框)
  2. 【图像处理】——比特平面原理和实现方法(全网较全面,含所有比特位图的分层方法)
  3. 【图像处理】——图像滤波(Python+opencv实现三种方法:均值滤波、中值滤波、高斯滤波等)
  4. win10+tensorflow faster-RCNN 训练自己的数据集
  5. 橱柜高度与身高对照表_下一套房子装修,橱柜就照这样打,布局尺寸这么详细,不信不好用...
  6. aop在项目中的实际运用_mypy在实际项目中的应用
  7. 金蝶系统服务器要求,金蝶服务器安装及其相关要求.doc
  8. html meta页面自适应,【转载·收藏】 html5手机网站自适应需要加的meta标签
  9. mysql 存储过程月单拆天单_MySQL之存储过程按月创建表的方法步骤
  10. Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验