怎么将数据库树表生成xml结构的文件
如何将数据库树表生成xml结构的文件
目前web开发种,根据xml文件显示成树的例子已经非常多了,解决方案也很多,网上都有很多的介绍,在此就不多说了。下面我来一步一步说明xml树的制作和xml文件生成。
第一步:创建一张表,简单不多说,直接看字段
tree_id
tree_text
tree_pid
tree_action(本字段可以自由定义,比如记录点击节点后的action,等等)
举例:
有个约定,就是父节点的id序号必须大于子节点的id序号(方便排序)
第二步:创建getter and setter类
第三步:数据存取(如果知道怎样获得tree_t的对象list,第三步就不需要看了)
在这里怎么写dao类,怎么创建connection以及使用怎么从数据库里面取数据,就不详细多说了,关键是怎么写sql语句:
第四步:生成XML文件(这一步,最主要),这一步的原理是利用dom4j中的visitor模式来遍历和添加节点到xml文件中。
创建类,必须派生VisitorSupport
目前web开发种,根据xml文件显示成树的例子已经非常多了,解决方案也很多,网上都有很多的介绍,在此就不多说了。下面我来一步一步说明xml树的制作和xml文件生成。
第一步:创建一张表,简单不多说,直接看字段
tree_id
tree_text
tree_pid
tree_action(本字段可以自由定义,比如记录点击节点后的action,等等)
举例:
tree_id | tree_text | tree_pid | tree_action |
1 | 系统设置 | 0 | null |
2 | 用户设置 | 1 | user_action |
3 | 角色设置 | 1 | role_action |
4 | 权限设置 | 1 | privilege_action |
5 | 业务模块 | 0 | null |
6 | 销售管理 | 5 | sale_action |
有个约定,就是父节点的id序号必须大于子节点的id序号(方便排序)
第二步:创建getter and setter类
package com.test; public class Tree { private String treeId; private String treeText; private String treePid; private String treeAction; public String getTreeId() { return treeId; } public void setTreeId(String treeId) { this.treeId = treeId; } public String getTreeText() { return treeText; } public void setTreeText(String treeText) { this.treeText = treeText; } public String getTreePid() { return treePid; } public void setTreePid(String treePid) { this.treePid = treePid; } public String getTreeAction() { return treeAction; } public void setTreeAction(String treeAction) { this.treeAction = treeAction; } }
第三步:数据存取(如果知道怎样获得tree_t的对象list,第三步就不需要看了)
在这里怎么写dao类,怎么创建connection以及使用怎么从数据库里面取数据,就不详细多说了,关键是怎么写sql语句:
创建一个类: public class TreeDAO(){ public List getTreeList(){ String sql = "select tree_id,tree_text,tree_pid,tree_action from tree_t order by tree_pid,tree_id"; //上面的关键点是order by tree_pid,tree_id,目的是使取出来的数据按照tree_pid的次序来排序。 //取数据的过程就不说了,网上一大堆,关键是要将所有取出来的装载到Tree对象中 Tree tree = null; //...遍历结果集 tree = new Tree(); tree.setTreeId(rs.getString("")); tree.setTreeText(rs.getString("")); tree.setTreePid(rs.getString("")); tree.setTreeAction(rs.getString("")); list.add(tree); //...结束遍历 return list; } }
第四步:生成XML文件(这一步,最主要),这一步的原理是利用dom4j中的visitor模式来遍历和添加节点到xml文件中。
创建类,必须派生VisitorSupport
import java.util.*; import org.dom4j.*; import org.dom4j.VisitorSupport; public class TreeBO extends VisitorSupport { private Tree tree; public Tree getTree() { return tree; } public void setTree(Tree tree) { this.tree = tree; } public void visit(Element element) { Tree t = this.getTree(); if (element.attributeValue("id").equals(t.getTreePid())) { Element e = element.addElement("item"); e.addAttribute("text", t.getTreeText()); e.addAttribute("id", t.getTreeId()); e.addAttribute("pid", t.getTreePid()); e.addAttribute("action",t.getTreeAction()); } } public void visit(Attribute attr) { } public String getTreeXml() { TreeDAO dao = new TreeDAO(); List list = dao.getTreeList(); Document document = DocumentHelper.createDocument(); Element root= document.addElement("tree").addAttribute("id", "0").addAttribute("radio", "0"); TreeBO bo = new TreeBO(); //遍历获得的list,每get(i)一个元素,遍历一次xml文件,看看当前元素的pid与xml文件的哪一个对应,对应的,则在这个父节点上挂子节点 for (int i = 0; i < list.size(); i++) { bo.setTree((Tree) list.get(i)); root.accept(bo);//利用dom4j的visitor模式进行xml文件的遍历 } return root.asXML();//最后生成xml } }
1 楼
火种烤冰
2011-09-10
大哥,谢谢