请教一个无限级XML树的递归写法

starsoulxp 2006-11-17 02:33:23
我有一个category表,包含nodeid,nodename,haschild,parentid等字段。

我已经将每一行作为一个CategoryBean放在一个ArrayList里,我现在想把ArrayList里的数据取出来,通过jdom生成如下类型的xml文件:

<Categories>
<Category id="1">
<name>1</name>
<Category id="1.1">
<name>1.1</name>
<Category id="1.1.1">
<name>1.1.1</name>
.....
.....
</Category>
<Category id="1.1.2">
<name>1.1.2</name>
.....
.....
</Category>
</Category>
<Category id="1.2">
<name>1.2</name>
.....
.....
</Category>
</Category>

<Category id="2">
<name>2</name>
.....
.....
</Category>
.....
.....

</Categories>

由于这个栏目树是无限级的,所以在用递归的算法写xml的时候不太会写了,哪位可以给点代码或者思路什么的?
...全文
393 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
starsoulxp 2006-11-21
  • 打赏
  • 举报
回复
大家帮帮忙吧
starsoulxp 2006-11-21
  • 打赏
  • 举报
回复
用这个的方法我已经实现了.可是还是不知道用jdom的怎么实现呢.
hbwhwang 2006-11-20
  • 打赏
  • 举报
回复
不是我不想帮你写。是要帮你写的话,我又要把JDOM翻出来,好久没用过JDOM了,现在用xerces
starsoulxp 2006-11-20
  • 打赏
  • 举报
回复
楼上,代码自然是可行的了,不过我要根据这个思想改造成jdom生成xml的
starsoulxp 2006-11-20
  • 打赏
  • 举报
回复
高手都哪里去了?
starsoulxp 2006-11-20
  • 打赏
  • 举报
回复
只要解决就行,多少分无所谓 ,不够可以加
snrss 2006-11-20
  • 打赏
  • 举报
回复
要给分才行啊~!
starsoulxp 2006-11-20
  • 打赏
  • 举报
回复
to hbwhwang(catmiw的ID已经停用,现在用这个)

你的程序很好,可是我想要用jdom写的xml,生成xml文件。我老是改不出来啊
nccxl 2006-11-17
  • 打赏
  • 举报
回复
等了一下午,楼主也没表态说行不行。偶也先收藏,日后再研究。
amozon 2006-11-17
  • 打赏
  • 举报
回复
真是厉害呀,代码收藏
starsoulxp 2006-11-17
  • 打赏
  • 举报
回复
楼上辛苦了,我研究下,行的话马上结贴。
hbwhwang 2006-11-17
  • 打赏
  • 举报
回复
import java.util.*;

class Category{
String nodeid,nodename,haschild,parentid;
public Category(String nodeid,String nodename,String haschild,String parentid){
this.nodeid=nodeid;
this.nodename=nodename;
this.haschild=haschild;
this.parentid=parentid;
System.out.println(nodeid+","+nodename+","+haschild+","+parentid);
}
public String toString(){
return nodeid+","+nodename+","+haschild+","+parentid;
}
}

public class TestTreeNode {
public static String createTree(List data){
StringBuffer buf=new StringBuffer();
buf.append("<Categories>\n");
List root=getRootNode(data);
Iterator it=root.iterator();
while(it.hasNext()){
Category temp=(Category)it.next();
System.out.println("temp--"+temp);
writeNode(temp,data,buf,1);
}

buf.append("</Categories>\n");
return buf.toString();
}

public static List getRootNode(List data){
List root=new ArrayList();
Iterator it=data.iterator();
while(it.hasNext()){
Category temp=(Category)it.next();
if (temp.parentid==null){
System.out.println("root:"+temp);
root.add(temp);
}
}
return root;
}

public static void writeNode(Category node,List data,StringBuffer buf,int deep){
for (int i=0;i<deep;i++){
buf.append(" ");
}
buf.append("<Category id=\"");
buf.append(node.nodeid);
buf.append(" name=\"");
buf.append(node.nodename);
buf.append("\">\n");

Iterator it=data.iterator();
while(it.hasNext()){
Category temp=(Category)it.next();
if (node.nodeid.equals(temp.parentid)){
writeNode(temp,data,buf,deep+1);
}
}

for (int i=0;i<deep;i++){
buf.append(" ");
}
buf.append("</Category>\n");

}

public static void main(String[] args){
List test=new ArrayList();
Random random=new Random();
int r1=random.nextInt(10)+1;
for (int i=0;i<r1;i++){
String s1=String.valueOf(i);
test.add(new Category(s1,"node "+s1,null,null));
int r2=random.nextInt(10);
for (int j=0;j<r2;j++){
String s2=s1+"."+String.valueOf(j);
test.add(new Category(s2,
"node "+s2,null,s1));
int r3=random.nextInt(10);
for (int k=0;k<r3;k++){
String s3=s2+"."+String.valueOf(k);
test.add(new Category(s3,
"node "+s3,null,s2));
}
}
}

System.out.println(createTree(test));
}
}
jk88811 2006-11-17
  • 打赏
  • 举报
回复
貌似挺难的, 帮顶一下!

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧