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

数据库有数据表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 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代码,难度不大。

转载于:https://www.cnblogs.com/dalmeeme/archive/2012/04/05/2433275.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值