2008-04-26

树目录结构数据层的设计问题

关键字: dom4j操作xml树目录结构数据层的设计问题

这两天遇到一个树目录的问题,前台的问题基本上已经确定了,使用dtree,比较不错的一个开源树,可以根据需要添加自己的function。

先说说具体的流程:

    用户点击一个书目录节点,可以展开该目录下的所有文件夹,同时把该文件夹以及所有子文件夹下面的文件在右边list出来。这样的话用数据库就必须有很好的设计思路(网上看到一个,下面会提到),不然一个递归循环就得等半天,对数据库压力也比较大。但是我是想用xml文件来存取目录树的结构和该目录下文件的id,右边要显示的一些文件的信息还是用数据库来存取。因为xml文件的结构本身就是树型的,存取起来也比较方便.下面说说具体的步骤,xml放入操作可以使用jdom。我用的是dom4j,可能是先入为主吧。

我的xml测试文件log.xml:

<?xml version="1.0" encoding="gbk"?>

<log>

    <group>		 

		<folder id="1"> <!--下面会获得该节点的对象-->

			<folder>

			      <fileId>1</fileId>	

			</folder>

			<fileId>2</fileId>  <!---文件的id号-->

			<fileId>3</fileId>	

		</folder>	

		<folder id="2">

			<folder id="3">

			    <!---空文件夹-->

			</folder>

		</folder>	

		<fileId>4</fileId>	

		<fileId>5</fileId>		

	</group>

</log> 

 

下面将从xml文件中读取出指定文件夹下的所有文件的id以便从数据库中读取文件信息:

SAXReader saxReader = new SAXReader();



String fileName="d:/log.xml";



try {

	

	 //读入一个xml文件,转化为Document 对象

	Document document = saxReader.read(new File(fileName));



     /**

	*  获得log/group/folder节点内id属性值为1的节点	

	*  你没感觉到这种做法很想数据库的查询操作吗。是不是很神奇呢!

	**/



	Element  e=(Element)document.selectSingleNode("log/group/folder[@id='1']");



	//获得该节点下名称为 fileId 节点的迭代器



	

	Iterator  iterator = e.elementIterator("fileId");



	//下面就可以获得该文件夹下所有文件的id,然后就是从数据库查询了,我只是做了一个打印的测试。

	while(iterator.hasNext()){



	     System.out.println(((Element)iterator.next()).getText());



      } catch (DocumentException e) {



		e.printStackTrace();



	}

  至于插入数据的话指定到要插入的位置使用

element.setText("terryang");



//下面是实现更新文件

XMLWriter writer = new XMLWriter(new FileWriter(new File("d:/log.xml")));

writer.write(document);

writer.close();

 添加,修改,删除,插入的操作差不多,大家可以baidu,google一下。

可以看出,这样就可以很简单的实现节点的添加,修改,删除,插入,查询等操作。

好了,xml存取树节点的方法就是这样,希望大家多多指正。

 

下面我要说的是一个很好的数据库设计思路:

给出网址 http://www.java3z.com/cwbwebhome/article/article2/2781.html?id=1306

我就不在这再复制粘贴了!

 

 

 

评论
发表评论

您还没有登录,请登录后发表评论

terryang
搜索本博客
最近加入圈子
存档
最新评论