一个简单的树型目录实现

一个简单的树型XML文档的生成

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;

import com.shinecode.cybertraining.domain.Chapter;

/**
 * 类名:CreateTreeXml.java
 * 版本:
 * 更新日期:2008-4-24
 * 作者:Java.newlife
 * 功能描述:生成树型目录的XML文档
 */
public class CreateTreeXml {

 private Element root = new Element("nodes");

 private Document doc = new Document(root);

 private String path = null;

 public CreateTreeXml(){
  
 }
 
 public CreateTreeXml(String path) {
  this.path = path;
 }
 
 /*创建树的入口*/
 private void start(List<Tree> list)
 {
  Element e = null;
  createFile(0,e,list);
 }

 //要注意一下的,生成节点时
 private void createFile(int PId,Element p, List<Tree> list)
 {
  if(p == null) p = root;
  StringBuffer sb = new StringBuffer();
  for(int i = 0;i<list.size();i++)
  {
   Tree  temp = (Tree) list.get(i);

   //创建当前节点对象
   Element nowNode = new Element("node");
   
   /* 存入ID时的规则(1.只用当前ID;2.用父ID+当前ID)*/
   sb.delete(0, sb.length());
  // sb.append(temp.getParentId()); 
   sb.append(temp.getId());
   
   nowNode.setAttribute("id",sb.toString());
   nowNode.setAttribute("text",temp.getTitle());
   
   // 找到指定级别的子类
   if (PId == temp.getParentId())
   {
    // 这里是打印,可以换成输出,或是做别的处理
    System.out.println(temp.getTitle() + " parentId : " + PId);
    p.addContent(nowNode); //加入当前节点到父节点
    
    // 判断是否存在下级节点,若存在读取所有节点
    if (hasChild(list, temp.getId()))
     createFile(temp.getId(),nowNode,list);
   }
   
  }
  saveXmlFile();
 }
 
 /*把数据写入文件*/
 private void saveXmlFile()
 {
  XMLOutputter xmlout = new XMLOutputter();
  try
  {
   xmlout.output(doc,new FileOutputStream(path));
  } catch (FileNotFoundException e)
  {
   e.printStackTrace();
  } catch (IOException e)
  {
   e.printStackTrace();
  }
 }
 
 /*是否存在子节点*/
 private boolean hasChild(List<Tree> list, int parentId)
 {
  Iterator iterator = list.iterator();
  boolean bool = false;
  while (iterator.hasNext())
  {
   Tree t = (Tree) iterator.next();
   if (parentId == t.getParentId())
   {
    bool = true;
    break;
   }
  }
  return bool;
 }
 
 /*生成指定内容的XML文档(在这里我是用来生成试卷考点的XML文档)*/
 public void createChapterTree(){
  BaseService baseService = new ChapterService();
  List<Tree> treeList = new ArrayList<Tree>();
  List list = baseService.findAll();
  Iterator iterator = list.iterator();
  while(iterator.hasNext()){
   Tree tree = new Tree();
   Chapter chapter = (Chapter)iterator.next();
   tree.setId(chapter.getId());  //存入ID
   
   /*是否存在父对象*/
   if(chapter.getChapParentid() == null){  
    tree.setParentId(0);
   }else{
    tree.setParentId(chapter.getChapParentid().getId());
   }
   
   tree.setTitle(chapter.getChapName()); //节点名称
   treeList.add(tree);
  }
  start(treeList);
 }
 
 public static void main(String[] arg){
  /*测试生成XML文件开始*/
  CreateTreeXml ctx = new CreateTreeXml("Chapter.xml");
  ctx.createChapterTree();
 }

 /**
  * @return the path
  */
 public String getPath() {
  return path;
 }

 /**
  * @param path the path to set
  */
 public void setPath(String path) {
  this.path = path;
 }

}

Tree.java 是一个简单的JavaBean,有四个属性:

int id;//数据ID

int parentId;//父ID

String title;标题

int dept;//节点深度

(这里可以添加更多的属性,如:链接...)

页面显示树我用的MzTreeView2.0 ,加载生成的这个XML文件即可。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
$(function(){ $.fn.extend({ SimpleTree:function(options){ //初始化参数 var option = $.extend({ click:function(a){ } },options); option.tree=this; /* 在参数对象中添加对当前菜单的引用,以便在对象中使用该菜单 */ option._init=function(){ /* * 初始化菜单展开状态,以及分叉节点的样式 */ this.tree.find("ul ul").hide(); /* 隐藏所有子级菜单 */ this.tree.find("ul ul").prev("li").removeClass("open"); /* 移除所有子级菜单父节点的 open 样式 */ this.tree.find("ul ul[show='true']").show(); /* 显示 show 属性为 true 的子级菜单 */ this.tree.find("ul ul[show='true']").prev("li").addClass("open"); /* 添加 show 属性为 true 的子级菜单父节点的 open 样式 */ }/* option._init() End */ /* 设置所有超链接不响应单击事件 */ this.find("a").click(function(){ $(this).parent("li").click(); return false; }); /* 菜单项 接受单击 */ this.find("li").click(function(){ /* * 当单击菜单项 * 1.触发用户自定义的单击事件,将该 标签中的第一个超链接做为参数传递过去 * 2.修改当前菜单项所属的子菜单的显示状态(如果等于 true 将其设置为 false,否则将其设置为 true) * 3.重新初始化菜单 */ option.click($(this).find("a")[0]); /* 触发单击 */ /* * 如果当前节点下面包含子菜单,并且其 show 属性的值为 true,则修改其 show 属性为 false * 否则修改其 show 属性为 true */ /* if($(this).next("ul").attr("show")=="true"){ $(this).next("ul").attr("show","false"); }else{ $(this).next("ul").attr("show","true"); }*/ /* 初始化菜单 */ option._init(); }); /* 设置所有父节点样式 */ this.find("ul").prev("li").addClass("folder"); /* 设置节点“是否包含子节点”属性 */ this.find("li").find("a").attr("hasChild",false); this.find("ul").prev("li").find("a").attr("hasChild",true); /* 初始化菜单 */ option._init(); }/* SimpleTree Function End */ }); });

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值