1. package xml;
  2. import org.dom4j.Document;
  3. import org.dom4j.DocumentHelper;
  4. import org.dom4j.DocumentException;
  5. import org.dom4j.Element;
  6.  
  7. import java.util.*;
  8.  
  9. /**
  10.  * @author zouhailin
  11.  * 2013-7-5
  12.  */
  13. public class XmlTest {
  14.  
  15. // private static Map<String, String> xmlmap = new HashMap<String, String>();
  16. //存储xml元素信息的容器
  17. private static List<String> elemList = new ArrayList<String>();
  18.  
  19. //要测试的xml对象
  20. private static String srcXml = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" +
  21. "<doc>\n" +
  22. " <person>\n" +
  23. " <name>某人</name>\n" +
  24. " <adds> \n" +
  25. " <add ID=\"10002\">\n" +
  26. " <BS>10002</BS>\n" +
  27. " <note>西安市太白路</note>\n" +
  28. " </add>\n" +
  29. " <add ID=\"\">\n" +
  30. " <BS>10002</BS>\n" +
  31. " <note>空ID节点啊</note>\n" +
  32. " </add>\n" +
  33. " <add>\n" +
  34. " <BS>10002</BS>\n" +
  35. " <note>空ID节点啊</note>\n" +
  36. " </add>\n" +
  37. "\t\t\t<add ID=\"10001\">\n" +
  38. "\t\t\t\t<BS xmlns=\"10001\"/>\n" +
  39. " <note>西安市太白路2</note>\n" +
  40. " </add>\n" +
  41. "\t\t</adds>\n" +
  42. " </person>\n" +
  43. " <other>\n" +
  44. " <name ID=\"HEHE\">ASDF</name>\n" +
  45. " </other>\n" +
  46. "</doc>";
  47.  
  48. public static void main(String args[]) throws DocumentException {
  49. XmlTest test = new XmlTest();
  50. Element root = test.getRootElement();
  51. test.getElementList(root);
  52. String x = test.getListString(elemList);
  53.  
  54. System.out.println("-----------原xml内容------------");
  55. System.out.println(srcXml);
  56. System.out.println("-----------解析结果------------");
  57. System.out.println(x);
  58.  
  59. }
  60.  
  61. /**
  62. * 获取根元素
  63. *
  64. * @return
  65. * @throws DocumentException
  66. */
  67. public Element getRootElement() throws DocumentException {
  68. Document srcdoc = DocumentHelper.parseText(srcXml);
  69. Element elem = srcdoc.getRootElement();
  70. return elem;
  71. }
  72.  
  73. /**
  74. * 递归遍历方法
  75. *
  76. * @param element
  77. */
  78. public void getElementList(Element element) {
  79. List elements = element.elements();
  80. if (elements.size() == 0) {
  81. //没有子元素
  82. String xpath = element.getPath();
  83. String value = element.getTextTrim();
  84. elemList.add(xpath+" "+value);
  85. } else {
  86. //有子元素
  87. for (Iterator it = elements.iterator(); it.hasNext();) {
  88. Element elem = (Element) it.next();
  89. //递归遍历
  90. getElementList(elem);
  91. }
  92. }
  93. }
  94.  
  95. public String getListString(List<String> elemList) {
  96. StringBuffer sb = new StringBuffer();
  97. for (Iterator<String> it = elemList.iterator(); it.hasNext();) {
  98. String str = it.next();
  99. sb.append(str+"\n");
  100. }
  101. return sb.toString();
  102. }
  103. }

递归遍历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. hadoop 磁盘限额配置

    配置方法: 在 hdfs-site.xml 里配置如下参数,注意,那个 value 的值是配置该磁盘保留的DFS不能使用的空间大小,单位是字节. (如果多块硬盘,则表示为每块硬盘保留这么多空间) &l ...

  2. openCV之头文件分析

    我们利用openCV开源库进行项目开发时,往往要牵涉到头文件的添加问题,而openCV中头文件众多,该如何选择呢?下面对openCV2.4.10的头文件进行一个简单的梳理,以便能够快速的添加对应的头文 ...

  3. java中int,float,long,double取值范围,内存泄露

    java中int,float,long,double取值范围是多少? 写道 public class TestOutOfBound { public static void main(String[] ...

  4. Linux 双网卡绑定技术

    bond技术是在linux2.4以后加入内核. 一般步骤是1.把bonding模块加入内核, 2 编辑要绑定的网卡设置,去除地址设定 3 添加bond设备,设置地址等配置 4  重启网络 5 在交换机 ...

  5. hdu 1224 Free DIY Tour(最长的公路/dp)

    http://acm.hdu.edu.cn/showproblem.php? pid=1224 基础的求最长路以及记录路径. 感觉dijstra不及spfa好用,wa了两次. #include < ...

  6. 基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET

    基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET 基于libevent, libuv和android L ...

  7. Android最方便的数据库--LitePal

    郭最近看到神分析LitePal相框,我感觉很强烈,尝试了一下,真的好,我不知道,如果你不习惯学习,那么各不相同,我觉得很合适 看完之后,思想,对于我来说,,实体到set颂值,如果数据非常多,那么你可以 ...

  8. C# 开发Chrome内核浏览器(WebKit.net)

    原文地址:http://www.cnblogs.com/linyijia/p/4045333.html

  9. codeforces#256DIV2 D题Multiplication Table

    题目地址:http://codeforces.com/contest/448/problem/D 当时是依照找规律做的,规律倒是找出来了,可是非常麻烦非常麻烦. . 看到前几名的红名爷们3分钟就过了, ...

  10. Android学习-各种对话框

    在android的编程中,对话框的用处是非常多的,然而,有时对对话框的需求也是不一样的,那么现在,就总结对话框的种类,以及事件的处理形势. 1.简单的对话框 public void showDialo ...