您的位置:首页 > 其它

根据递归定义的数据表循环生成xml

2012-04-05 16:00 645 查看
数据库有数据表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:
<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代码,难度不大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐