`

递归列表生成xml

阅读更多
    同事设计了一个数据库表,就是实现树状结构的典型表结构
   
    字段有 id,name,code,parentCode
   为了只用一条sql语句就可以遍历出整个树,同事增加了一个字段 treeCode所以数据表看起来就是这样的 
    id   name  code parentCode treeCode

     1   sind  01   0           01
     2 sind01  02   01          0101
     3 sind02  03   01          0102
     4     aj  04   0           02
     5   aj01  05   02          0201

    我根据这个表的treeCode用delphi 的AdoQuery通过递归生成了树结构,代码很简单。然后想用java也实现同样的效果,小费了一些功夫,代码看起来也不够简洁。本想用iterator实现了,尝试了很多种办法都不行,最后还是妥协了用list 和 全局index 实现的,树用xml展现的。这里用的dom4j。现在把代码先贴出来,以便以后改进算法。

 class XmlCreator {

	private Integer userIndex;
	
	private void  FillTheList(List<User> users){
		User user = new User();
		user.setName("sind");
		user.setCode("01");
		user.setId(1);
		users.add(user);
		
		user = new User();
		user.setName("sind01");
		user.setCode("0101");
		user.setId(2);
		users.add(user);
		
		
		user = new User();
		user.setName("sind02");
		user.setCode("0102");
		user.setId(3);
		users.add(user);
		
		user = new User();
		user.setName("vicky");
		user.setCode("02");
		user.setId(4);
		users.add(user);
		
		user = new User();
		user.setName("vicky01");
		user.setCode("0201");
		user.setId(5);
		users.add(user);	
	}
	public void CreateXmlMain(){
		List<User> users = new ArrayList<User>();
		FillTheList(users);
        this.userIndex = 0;	
        Document doc = DocumentHelper.createDocument();
        doc.setXMLEncoding("GBK");
        Element root = doc.addElement("tree");
        CreateXmlNode(users,root);
        System.out.print(doc.asXML());
	}
	public void CreateXmlNode(List<User> list,Element el){
		//获取循环前 当前Code长度
		int codeLength = list.get(userIndex).getCode().length();
		while (userIndex<list.size()){
			User user = list.get(userIndex);
			//判断如果Code长度与上一个相同则循环添加节点,否则跳出循环 ...如果没有这个判断,会导致循环无法及时跳出,递归出错
			if (codeLength == user.getCode().length()){
				//添加节点
				Element sel = el.addElement("item");
				sel.addAttribute("name", user.getName());
				codeLength = user.getCode().length();
				//索引递增1
				userIndex++;
				//判断下一个Code长度是否大于当前长度,如果是则递归 
				if (userIndex<list.size()&&list.get(userIndex).getCode().length()>codeLength){
					CreateXmlNode(list,sel);
				}
			}else break;
		}
	}
}



生成的xml如下
<?xml version="1.0" encoding="GBK" ?> 
<tree>
<item name="sind">
  <item name="sind01" /> 
  <item name="sind02" /> 
  </item>
<item name="vicky">
  <item name="vicky01" /> 
  </item>
  </tree>


感觉肯定有更简单的办法实现这个递归,可惜对java语言的理解还是太肤浅,期待日后改进



 
分享到:
评论

相关推荐

    Spring+iBatis+JDom递归生成XML树

    在IT行业中,构建一个能够递归生成XML树的系统是一项常见的任务,特别是在处理复杂的数据结构时。本项目结合了Spring、iBatis和JDom这三个强大的技术,它们各自扮演着不同的角色来实现这一目标。 首先,Spring是一...

    c#递归生成XML实例

    本文实例讲述了c#递归生成XML的方法。分享给大家供大家参考。具体实现方法如下: 这里结合网上搜到的资料,写了个递归生成xml,经过调试可以使用,数据库结构如下图所示: 代码如下: 代码如下:using System; ...

    xsl递归解晰xml

    例如,如果我们有一个表示目录结构的XML,递归模板可以用来生成一个层级菜单或缩进列表。在“subjectTree.xsl”这个示例中,很可能就是用于解析“abc.xml”文件中的一棵树形结构数据。 下面是一个简单的XSLT递归...

    C# 递归遍历多层目录并将目录信息写入XML

    这个过程可以生成一个包含所有目录和文件信息的XML文件,每个目录和文件都有相应的节点。这使得我们可以轻松地在其他地方解析和使用这些数据。在实际应用中,可能还需要添加异常处理和自定义属性,以满足特定需求,...

    java_动态生成XML文件

    在Java编程中,生成XML文件是一项常见的任务,特别是在数据存储、配置管理或数据交换的应用场景。XML(eXtensible Markup Language)是一种结构化数据格式,具有良好的可读性和易于解析的特点。本教程将深入讲解如何...

    Qt实现的xml读写demo 递归

    在实际项目中,这个基础可以扩展到更复杂的数据解析和生成任务,比如XML数据的序列化与反序列化。理解并掌握这些技能对于进行Qt应用程序开发,尤其是涉及到数据交换和存储的场景,是非常重要的。

    使用Pull解析器读取XML文件和生成XML文件

    本篇文章将深入探讨如何使用Pull解析器来读取XML文件,以及如何生成XML文件。Pull解析器是一种轻量级的解析方式,它允许程序在解析XML时按需获取数据,而不需要一次性加载整个文档到内存,从而提高了效率和资源利用...

    一键生成xml打包tar上传服务器

    这个名为“一键生成xml打包tar上传服务器”的流程,正是这样一个自动化方案的体现。它主要用于Java Web项目,特别是那些基于JSP(JavaServer Pages)的系统,目的是简化数据处理、文件打包以及远程服务器部署的过程...

    基于Python实现的自动化生成XML解析类

    5. **自动生成代码**:最后,这个自动化工具可能还会包含一个功能,用于自动生成上述过程中的Qt类和绑定代码,这样开发者只需要专注于XML结构,无需关心底层的解析逻辑。 通过这种方式,开发者可以更专注于业务逻辑...

    用递归的方法绑定xml

    6. 组装XML:递归过程结束后,所有元素都已生成,可以将它们组装成一个完整的XML文档。这通常涉及创建XML文档对象,添加根元素,然后将其他元素插入适当的位置。 7. 输出XML:最后,我们可以将生成的XML文档写入...

    xml文件处理

    本文将深入探讨XML文件处理,包括如何递归解析XML以及递归生成XML。 一、XML基本概念 XML的设计目标是传输和存储数据,而非显示数据。XML文档由元素构成,元素可以包含其他元素、文本或属性。每个XML文档都有一个根...

    delphi文件XML生成树

    生成XML树是处理XML数据的一种常见方式,它可以帮助开发者直观地理解XML文档的结构,并方便进行解析和操作。本篇文章将深入探讨如何在Delphi中实现XML树的生成。 首先,我们需要了解Delphi中处理XML的主要组件——...

    spring+ibatis+jDom递归生成

    当我们谈论“spring+ibatis+jDom递归生成”时,可能是指在Spring应用中,使用iBatis进行数据查询,然后利用jDom解析返回的XML数据,通过递归方法构建复杂的对象树。以下是一种可能的实现方式: 1. 首先,在Spring...

    根据目录生成XML文件,根据xml目录树生成目录

    本主题主要探讨如何根据目录生成XML文件,以及如何根据XML目录树来重新构建目录结构。 首先,让我们深入理解如何根据目录生成XML文件。这一过程通常包括以下步骤: 1. **遍历目录**:程序会从根目录开始,递归地...

    读取xml生成树,ajax读取xml动态生成树(1)

    本教程将深入探讨如何通过读取XML文件来生成树形结构,以及利用AJAX技术动态加载XML数据以实现交互式树形菜单。 1. **XML基础知识** - XML元素:XML文档的核心组成部分,由开始标签、内容和结束标签组成,如`...

    c#递归遍历xml菜单

    以上代码将生成一个表示XML文件中菜单结构的`MenuItem`列表,可以进一步用于构建用户界面。 在实际项目中,可能还需要处理更复杂的情况,比如处理属性、处理不同类型的节点、错误处理等。但这个基本的递归遍历方法...

    通过xml生成目录树

    本文将详细讲解如何通过XML文件生成目录树,帮助你理解这一过程并掌握相关技术。 首先,XML文件是基于文本的,它使用标签来定义数据的结构和内容。一个基本的XML文件由元素、属性、文本内容和命名空间等构成。例如...

    java操纵xml文件的读写,并根据xml生成树型菜单

    ### Java操作XML文件读写与树型菜单生成详解 #### 一、背景介绍 在现代软件开发中,XML(Extensible Markup Language)被广泛应用于数据交换、配置文件管理以及多种跨平台的应用场景中。Java作为一种重要的后端开发...

    Jdom生成与解析XML

    下面我们将深入探讨如何利用JDOM生成XML以及解析XML。 一、JDOM生成XML 1. **导入JDOM库**: 首先,你需要在项目中引入JDOM库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org....

Global site tag (gtag.js) - Google Analytics