zoukankan      html  css  js  c++  java
  • 根据递归定义的数据表循环生成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代码,难度不大。

  • 相关阅读:
    解题:NOI 2007 社交网络
    解题:2018九省联考 一双木棋
    125. 背包问题 II
    152. 组合
    140. 快速幂
    148. 颜色分类
    144. 交错正负数
    83. 落单的数 II
    124. 最长连续序列
    59. 最接近的三数之和
  • 原文地址:https://www.cnblogs.com/dalmeeme/p/2433275.html
Copyright © 2011-2022 走看看