根据递归定义的数据表循环生成xml
2012-04-05 15:58
344 查看
数据库有数据表tbDept:
ID ParentID DeptName LevelID RoleID
1 0 软体研发处 0 0
2 1 软体研发一部 0 0
3 1 软体研发二部 0 0
4 1 软体研发三部 0 0
5 2 软体研发一部一课 0 0
6 2 软体研发一部二课 0 0
7 3 软体研发二部一课 0 0
8 3 软体研发二部一课 0 0
9 4 软体研发三部一课 0 0
10 4 软体研发三部二课 0 0
11 5 AAA 1 1
12 5 BBB 1 1
......
可以看出其中ID和ParentID是递归定义的,现在要生成如下形式的xml:
View Code
可以考虑先添加根元素root,然后用数据阅读器循环读取记录,每读一条就生成一个node元素,并将它添加到xml中指定元素的下面,做为其子元素。代码如下:
以上代码使用了自己的数据库操作类OleDbData,是数据库操作代码形式更简练,读者可改写成原生ADO.NET代码,难度不大。
ID ParentID DeptName LevelID RoleID
1 0 软体研发处 0 0
2 1 软体研发一部 0 0
3 1 软体研发二部 0 0
4 1 软体研发三部 0 0
5 2 软体研发一部一课 0 0
6 2 软体研发一部二课 0 0
7 3 软体研发二部一课 0 0
8 3 软体研发二部一课 0 0
9 4 软体研发三部一课 0 0
10 4 软体研发三部二课 0 0
11 5 AAA 1 1
12 5 BBB 1 1
......
可以看出其中ID和ParentID是递归定义的,现在要生成如下形式的xml:
View Code
<root> <node ID="1" ParentID="0" DeptName="软体研发处" LevelID="0" RoleID="0"> <node ID="2" ParentID="1" DeptName="软体研发一部" LevelID="0" RoleID="0"> <node ID="5" ParentID="2" DeptName="软体研发一部一课" LevelID="0" RoleID="0"> <node ID="11" ParentID="5" DeptName="AAA" LevelID="1" RoleID="1" /> <node ID="12" ParentID="5" DeptName="BBB" LevelID="1" RoleID="1" /> </node> <node ID="6" ParentID="2" DeptName="软体研发一部二课" LevelID="0" RoleID="0" /> </node> <node ID="3" ParentID="1" DeptName="软体研发二部" LevelID="0" RoleID="0"> <node ID="7" ParentID="3" DeptName="软体研发二部一课" LevelID="0" RoleID="0" /> <node ID="8" ParentID="3" DeptName="软体研发二部二课" LevelID="0" RoleID="0" /> </node> <node ID="4" ParentID="1" DeptName="软体研发三部" LevelID="0" RoleID="0"> <node ID="9" ParentID="4" DeptName="软体研发三部一课" LevelID="0" RoleID="0" /> <node ID="10" ParentID="4" DeptName="软体研发三部二课" LevelID="0" RoleID="0" /> </node> </node> </root>
可以考虑先添加根元素root,然后用数据阅读器循环读取记录,每读一条就生成一个node元素,并将它添加到xml中指定元素的下面,做为其子元素。代码如下:
XmlDocument xmlDoc = new XmlDocument(); XmlElement root = xmlDoc.CreateElement("root"); xmlDoc.AppendChild(root); OleDbData md = new OleDbData(); md.ExecuteReader("select * from tbDept"); while (md.Reader.Read()) { XmlElement node = xmlDoc.CreateElement("node"); for (int i = 0; i < md.Reader.FieldCount; i++) node.SetAttribute(md.Reader.GetName(i), md.Reader[i].ToString()); int parentID = Convert.ToInt32(md.Reader["ParentID"]); if (parentID > 0) xmlDoc.SelectSingleNode(string.Format(@"//node[@ID='{0}']", parentID)).AppendChild(node); else xmlDoc.DocumentElement.AppendChild(node); } md.Close(); xmlDoc.Save(Server.MapPath("~/test.xml"));
以上代码使用了自己的数据库操作类OleDbData,是数据库操作代码形式更简练,读者可改写成原生ADO.NET代码,难度不大。
相关文章推荐
- 根据递归定义的数据表循环生成xml
- C#根据条件搜索Infopath生成的XML数据
- 根据数据字典表定义的表结构,生成创建表的SQL语句
- 根据XML配置规则导入Excel数据(一)定义XML规则
- 根据xsl模板及xml数据文件生成pdf(文字内容复制不乱码)
- 根据XML配置规则导入Excel数据(二)定义XML规则对象
- 读取Xml文件,创建DataTable,递归循环Xml节点,添加数据到DataTable,绑定到GridView
- myeclipse 逆向工程生成根据数据表生成映射文件,javaBean,hibernate.cfg.xml
- 读取Xml文件,创建DataTable,递归循环读取Xml数据添加到DataTable,绑定数据到GridView
- myeclipse 逆向工程生成根据数据表生成映射文件,javaBean,hibernate.cfg.xml
- 平面文件根据XSD定义生成对应的XML结构文件
- Java根据word模板生成word文档之设计详细思路---XML标签定义
- 小技巧(11)-Jquery递归获取XML数据生成ul-li结构
- (转载)根据数据字典表定义的表结构,生成创建表的SQL语句
- 根据用户的数据生成相应的XML(三维立体饼图数据)
- 对Xml的文件操作,根据数据的配置和数据样式的定义,将结果字符输出
- 11.PHP生成XML数据,android解析XML案例简介
- C++文本查询程序 不要定义类和智能指针管理数据 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- 根据排序定义表排序数据
- 根据XML文件批量生成java类——freemarker