同事设计了一个数据库表,就是实现树状结构的典型表结构
字段有 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语言的理解还是太肤浅,期待日后改进
分享到:
相关推荐
在IT行业中,构建一个能够递归生成XML树的系统是一项常见的任务,特别是在处理复杂的数据结构时。本项目结合了Spring、iBatis和JDom这三个强大的技术,它们各自扮演着不同的角色来实现这一目标。 首先,Spring是一...
本文实例讲述了c#递归生成XML的方法。分享给大家供大家参考。具体实现方法如下: 这里结合网上搜到的资料,写了个递归生成xml,经过调试可以使用,数据库结构如下图所示: 代码如下: 代码如下:using System; ...
例如,如果我们有一个表示目录结构的XML,递归模板可以用来生成一个层级菜单或缩进列表。在“subjectTree.xsl”这个示例中,很可能就是用于解析“abc.xml”文件中的一棵树形结构数据。 下面是一个简单的XSLT递归...
这个过程可以生成一个包含所有目录和文件信息的XML文件,每个目录和文件都有相应的节点。这使得我们可以轻松地在其他地方解析和使用这些数据。在实际应用中,可能还需要添加异常处理和自定义属性,以满足特定需求,...
在Java编程中,生成XML文件是一项常见的任务,特别是在数据存储、配置管理或数据交换的应用场景。XML(eXtensible Markup Language)是一种结构化数据格式,具有良好的可读性和易于解析的特点。本教程将深入讲解如何...
在实际项目中,这个基础可以扩展到更复杂的数据解析和生成任务,比如XML数据的序列化与反序列化。理解并掌握这些技能对于进行Qt应用程序开发,尤其是涉及到数据交换和存储的场景,是非常重要的。
本篇文章将深入探讨如何使用Pull解析器来读取XML文件,以及如何生成XML文件。Pull解析器是一种轻量级的解析方式,它允许程序在解析XML时按需获取数据,而不需要一次性加载整个文档到内存,从而提高了效率和资源利用...
这个名为“一键生成xml打包tar上传服务器”的流程,正是这样一个自动化方案的体现。它主要用于Java Web项目,特别是那些基于JSP(JavaServer Pages)的系统,目的是简化数据处理、文件打包以及远程服务器部署的过程...
5. **自动生成代码**:最后,这个自动化工具可能还会包含一个功能,用于自动生成上述过程中的Qt类和绑定代码,这样开发者只需要专注于XML结构,无需关心底层的解析逻辑。 通过这种方式,开发者可以更专注于业务逻辑...
6. 组装XML:递归过程结束后,所有元素都已生成,可以将它们组装成一个完整的XML文档。这通常涉及创建XML文档对象,添加根元素,然后将其他元素插入适当的位置。 7. 输出XML:最后,我们可以将生成的XML文档写入...
本文将深入探讨XML文件处理,包括如何递归解析XML以及递归生成XML。 一、XML基本概念 XML的设计目标是传输和存储数据,而非显示数据。XML文档由元素构成,元素可以包含其他元素、文本或属性。每个XML文档都有一个根...
生成XML树是处理XML数据的一种常见方式,它可以帮助开发者直观地理解XML文档的结构,并方便进行解析和操作。本篇文章将深入探讨如何在Delphi中实现XML树的生成。 首先,我们需要了解Delphi中处理XML的主要组件——...
当我们谈论“spring+ibatis+jDom递归生成”时,可能是指在Spring应用中,使用iBatis进行数据查询,然后利用jDom解析返回的XML数据,通过递归方法构建复杂的对象树。以下是一种可能的实现方式: 1. 首先,在Spring...
本主题主要探讨如何根据目录生成XML文件,以及如何根据XML目录树来重新构建目录结构。 首先,让我们深入理解如何根据目录生成XML文件。这一过程通常包括以下步骤: 1. **遍历目录**:程序会从根目录开始,递归地...
本教程将深入探讨如何通过读取XML文件来生成树形结构,以及利用AJAX技术动态加载XML数据以实现交互式树形菜单。 1. **XML基础知识** - XML元素:XML文档的核心组成部分,由开始标签、内容和结束标签组成,如`...
以上代码将生成一个表示XML文件中菜单结构的`MenuItem`列表,可以进一步用于构建用户界面。 在实际项目中,可能还需要处理更复杂的情况,比如处理属性、处理不同类型的节点、错误处理等。但这个基本的递归遍历方法...
本文将详细讲解如何通过XML文件生成目录树,帮助你理解这一过程并掌握相关技术。 首先,XML文件是基于文本的,它使用标签来定义数据的结构和内容。一个基本的XML文件由元素、属性、文本内容和命名空间等构成。例如...
### Java操作XML文件读写与树型菜单生成详解 #### 一、背景介绍 在现代软件开发中,XML(Extensible Markup Language)被广泛应用于数据交换、配置文件管理以及多种跨平台的应用场景中。Java作为一种重要的后端开发...
下面我们将深入探讨如何利用JDOM生成XML以及解析XML。 一、JDOM生成XML 1. **导入JDOM库**: 首先,你需要在项目中引入JDOM库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org....