一个简单的树型目录实现
2008-04-28 10:48
330 查看
一个简单的树型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文件即可。。。
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文件即可。。。
相关文章推荐
- 利用一个简单的递归实现打印目录的层次结构
- 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站
- 笔记1-1: 实现一个简单的ls列出目录中的所有项目的程序
- 一个简单的makefile的实现,编译当前目录下所有的.c文件
- 一个简单的内存池(c实现)之一
- 关于实现移动终端间互通信及相应交互方式的简单设想——畅想一个信息自由流动的时代
- 使用react-native做一个简单的应用-06商品界面的实现
- 一个基于AIO实现的简单web服务器
- C语言 实现一个简单的Shell (支持管道和"cd")
- 一个简单的Thread缓冲池的实现
- 一个简单好用的Android Tab 设计与实现
- 一个购物车的简单实现(多层开发)
- TopK的一个简单实现
- MFC实现一个简单的计算器
- 一个简单的链表实现
- 一个简单的HashMap C语言实现
- 【C语言】没事可以试试这个小程序,使用文件操作,模拟实现一个简单的文件拷贝工具!
- ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现
- php实现的一个简单json rpc框架实例
- C语言实现的一个简单的HTTP程序