package xml;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.DocumentException;
import org.dom4j.Element; import java.util.*; /**
 * @author zouhailin
 * 2013-7-5
 */
public class XmlTest { // private static Map<String, String> xmlmap = new HashMap<String, String>();
//存储xml元素信息的容器
private static List<String> elemList = new ArrayList<String>(); //要测试的xml对象
private static String srcXml = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" +
"<doc>\n" +
" <person>\n" +
" <name>某人</name>\n" +
" <adds> \n" +
" <add ID=\"10002\">\n" +
" <BS>10002</BS>\n" +
" <note>西安市太白路</note>\n" +
" </add>\n" +
" <add ID=\"\">\n" +
" <BS>10002</BS>\n" +
" <note>空ID节点啊</note>\n" +
" </add>\n" +
" <add>\n" +
" <BS>10002</BS>\n" +
" <note>空ID节点啊</note>\n" +
" </add>\n" +
"\t\t\t<add ID=\"10001\">\n" +
"\t\t\t\t<BS xmlns=\"10001\"/>\n" +
" <note>西安市太白路2</note>\n" +
" </add>\n" +
"\t\t</adds>\n" +
" </person>\n" +
" <other>\n" +
" <name ID=\"HEHE\">ASDF</name>\n" +
" </other>\n" +
"</doc>"; 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(xpath+" "+value);
} else {
//有子元素
for (Iterator it = elements.iterator(); it.hasNext();) {
Element elem = (Element) it.next();
//递归遍历
getElementList(elem);
}
}
} public String getListString(List<String> elemList) {
StringBuffer sb = new StringBuffer();
for (Iterator<String> it = elemList.iterator(); it.hasNext();) {
String str = it.next();
sb.append(str+"\n");
}
return sb.toString();
}
}

递归遍历XML所有节点的更多相关文章

  1. 递归遍历XML节点属性和属性值

    public static XmlDocument FileMergedIntoXML(string strXmlPathPublic) { string strXmlPathPublic = str ...

  2. 【转】循环递归遍历XML文档或按某要求遍历XML文档

    <?xml version="1.0" encoding="UTF-8"?> <catalog> <cd> <titl ...

  3. python 遍历xml所有节点

    1.xml文件 2.代码 #coding:utf-8 import xml import xml.etree.ElementTree as ET """ 实现从xml文件 ...

  4. jquery递归遍历xml文件,形成ul-li序列,生成树结构(使用了treeview插件)

    treeview插件从这里获得,下载的文件中有demo,看demo文件夹里面的index.html文件就差不多知道如何使用该控件了,在我做的项目里用到的部分代码截图如下(在引用下面的js文件前要先引用 ...

  5. MySQL 树节点递归遍历所以子节点

    DELIMITER $$ DROP FUNCTION IF EXISTS `getChildList`$$ CREATE FUNCTION `getChildList`(rootId INT) RET ...

  6. 递归遍历所有xml的节点及子节点

    import java.io.File; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; i ...

  7. 使用dom4j讲xml字符串递归遍历成Map

    package test; import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import j ...

  8. 问题:jQuery中遍历XML文件时候,获取子节点children不支持的情况(已解决)

    问题描述: 今天在写一个基于 jquery 的读取xml文件的程序时候,需要遍历xml的节点. 代码片段如下: function parse_xml_node(parent,result){ // r ...

  9. [java开发篇][dom4j模块] 遍历xml文件

    http://blog.csdn.net/chenleixing/article/details/44353491 在android studio 导入dom4j库(build-gradle(Moud ...

随机推荐

  1. C语言scanf函数详解

    函数名: scanf  功 能: 运行格式化输入  用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设 ...

  2. 鸟哥之安裝 CentOS7.x

    http://linux.vbird.org/linux_basic/0157installcentos7.php since 2002/01/01 新手建議 開始閱讀之前 網站導覽 Linux 基礎 ...

  3. [Android学习笔记]双缓冲绘图技术

    双缓冲技术绘图: 什么情况下产生的双缓冲技术?当数据量很大时,绘图可能需要花费很长的时间,这样屏幕就会出现卡顿,闪烁等现象. 什么是双缓冲技术?双缓冲是在内存中创建一个与屏幕绘制区域一致的对象,先将图 ...

  4. c#超时锁定

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. Linux内核源代码解析之TCP面向字节流

    本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/11264237 大家都知道TCP是面向stream,而 ...

  6. iphone开发中数据持久化之——模型对象归档(二)

    在Cocoa世界中,术语“归档”是指另一种形式的序列化,它可以实现对任何对象的序列化.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们.只要在类中实现的每个属性都是标量(如 ...

  7. linux进程通信之信号

    本节主要学习信号和与信号相关的处理函数,兴许还会更新. http://blog.csdn.net/xiaoliangsky/article/details/40264151 一 信号 信号是UNIX和 ...

  8. python语言学习6——python基础

    Python是一种计算机编程语言. 以#开头的语句是注释,注释是给人看的,可以是任意内容 其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块. Python程序是大小写敏感的,如果写错 ...

  9. 【Bug Fix】Error : Can&#39;t create table &#39;moshop_1.#sql-534_185&#39; (errno: 150)

    运行alter操作, alter table xx_shop_info add index FK9050F5D83304CDDC (shop_area), add constraint FK9050F ...

  10. 2014 CSDN博文大赛终于获奖名单发布

    博文大赛第二阶段(2014年7月15日-2014年8月10日)已经结束,决赛获奖名单已在8月11日出炉. 现将获奖名单发布: 移动开发 NO.1    罗升阳    Luoshengyang    S ...