递归遍历XML生成树

来源:互联网 发布:seo服务器 编辑:程序博客网 时间:2024/05/19 04:55
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.Web.UI;
  7. using System.Web.UI.WebControls;
  8. using System.Web.UI.WebControls.WebParts;
  9. using System.Web.UI.HtmlControls;
  10. using System.Xml;
  11. public partial class Default_aspx
  12. {
  13.  void Page_Load(object sender, EventArgs e)
  14.  { 
  15.   string xmlstr = "<?xml version=/"1.0/"?><root><Note NodeName=/"的1/"><Note NodeName=/"的2/"><Note NodeName=/"的3/" /><Note NodeName=/"的4/" /></Note><Note NodeName=/"的5/" /></Note><Note NodeName=/"的6/"><Note NodeName=/"的7/"><Note NodeName=/"的8/" /><Note NodeName=/"的9/" /></Note><Note NodeName=/"的10/" /></Note></root>";
  16.   IterateXml(xmlstr);
  17.  }
  18. /*
  19.  <?xml version=/"1.0/"?><root><Note NodeName=/"的1/"><Note NodeName=/"的2/"><Note NodeName=/"的3/" /><Note NodeName=/"的4/" /></Note><Note NodeName=/"的5/" /></Note><Note NodeName=/"的6/"><Note NodeName=/"的7/"><Note NodeName=/"的8/" /><Note NodeName=/"的9/" /></Note><Note NodeName=/"的10/" /></Note></root>"
  20.  */
  21.  private void IterateXml(string xmlstr)
  22.  {
  23.   XmlDocument xmldoc = new XmlDocument(); 
  24.   xmldoc.LoadXml(xmlstr);
  25.   XmlNode worknode;
  26.   TreeNode rootnode;
  27.   for (int i = 0; i < xmldoc.DocumentElement.ChildNodes.Count; i++)
  28.   {
  29.    worknode = xmldoc.DocumentElement.ChildNodes[i];
  30.    if (worknode.ChildNodes.Count > 0)
  31.     rootnode = IterateChild(worknode);
  32.    else 
  33.     rootnode = new TreeNode(worknode.Name);
  34.    this.TreeView1.Nodes.Add(rootnode);   
  35.   }
  36.  }
  37.  private TreeNode  IterateChild(XmlNode rootnode)
  38.  {
  39.   XmlNode worknode = rootnode;//当前遍历的节点 
  40.   System.Web.UI.WebControls.TreeNode retnode = new TreeNode(worknode.Attributes["NodeName"].Value); ;//要返回的树节点
  41.   TreeNode newch;//中间树节点 
  42.   if (worknode.ChildNodes.Count < 1)
  43.   {//没有子节点,生成一个树节点返回
  44.    newch = new TreeNode(worknode.Attributes["NodeName"].Value);
  45.    retnode = newch;
  46.   }
  47.   else //有子节点,调用递归
  48.   {
  49.    for (int i = 0; i < worknode.ChildNodes.Count; i++)
  50.    {
  51.     retnode.ChildNodes.Add(IterateChild(worknode.ChildNodes[i]));
  52.    }
  53.   } 
  54.   return retnode;
  55.  }
  56. ======================================================
  57. 供测试XML
  58. <?xml   version   = "1.0 "   encoding= "utf-8 "?>
    <types>
              <type   id= "0 "   uid= "-1 "   value= "我的超眩个人桌面 "   />
                      <type   id= "0.0 "   uid= "0 "   value= "电子邮件 "   />
                                <type   id= "0.0.1 "   uid= "0.0 "   value= "安徽工业大学 "/>
                                <type   id= "0.0.2 "   uid= "0.0 "   value= "安徽农业大学 "/>
                                <type   id= "0.0.3 "   uid= "0.0 "   value= "合肥工业大学 "/>
                      <type   id= "0.1 "   uid= "0 "   value= "短消息 "   />
                      <type   id= "0.2 "   uid= "0 "   value= "公司通知 "   />
                      <type   id= "0.3 "   uid= "0 "   value= "日程安排 "   />
                      <type   id= "0.4 "   uid= "0 "   value= "个人考勤 "   />
                      <type   id= "0.5 "   uid= "0 "   value= "通讯录 "   />
                      <type   id= "0.6 "   uid= "0 "   value= "个人设置 "   />
       
              <type   id= "1 "   uid= "-1 "   value= "玩转工作流程 "   />
                      <type   id= "1.0 "   uid= "1 "   value= "起草公文 "   />
                      <type   id= "1.1 "   uid= "1 "   value= "已起草的公文 "   />
                      <type   id= "1.2 "   uid= "1 "   value= "已提交的公文 "   />
                      <type   id= "1.3 "   uid= "1 "   value= "传阅公文 "   />
                      <type   id= "1.4 "   uid= "1 "   value= "待阅公文 "   />
                      <type   id= "1.5 "   uid= "1 "   value= "已审阅的公文 "   />
                      <type   id= "1.6 "   uid= "1 "   value= "已批的公文 "   />
                      <type   id= "1.7 "   uid= "1 "   value= "公文检索 "   />
    </types>  
原创粉丝点击