简简单单BLOG

开拓进取,提高才是硬道理 _ _ _ _Toney
随笔 - 21, 文章 - 10, 评论 - 5, 阅读 - 22067
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年4月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 1 2 3
4 5 6 7 8 9 10

递归遍历XML生成树

Posted on   Toney  阅读(2666)  评论(1)    收藏  举报

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
public partial class Default_aspx
{
 void Page_Load(object sender, EventArgs e)
 {

  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>";
  IterateXml(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>"
 */
 private void IterateXml(string xmlstr)
 {
  XmlDocument xmldoc = new XmlDocument();

  xmldoc.LoadXml(xmlstr);
  XmlNode worknode;
  TreeNode rootnode;
  for (int i = 0; i < xmldoc.DocumentElement.ChildNodes.Count; i++)
  {
   worknode = xmldoc.DocumentElement.ChildNodes[i];
   if (worknode.ChildNodes.Count > 0)
    rootnode = IterateChild(worknode);
   else
    rootnode = new TreeNode(worknode.Name);
   this.TreeView1.Nodes.Add(rootnode);   
  }
 }
 private TreeNode  IterateChild(XmlNode rootnode)
 {
  XmlNode worknode = rootnode;//当前遍历的节点

  System.Web.UI.WebControls.TreeNode retnode = new TreeNode(worknode.Attributes["NodeName"].Value); ;//要返回的树节点
  TreeNode newch;//中间树节点

  if (worknode.ChildNodes.Count < 1)
  {//没有子节点,生成一个树节点返回
   newch = new TreeNode(worknode.Attributes["NodeName"].Value);
   retnode = newch;
  }
  else //有子节点,调用递归
  {
   for (int i = 0; i < worknode.ChildNodes.Count; i++)
   {
    retnode.ChildNodes.Add(IterateChild(worknode.ChildNodes[i]));
   }
  }

  return retnode;
 }
}

编辑推荐:
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
阅读排行:
· 博客园2025新款「AI繁忙」系列T恤上架
· Avalonia跨平台实战(二),Avalonia相比WPF的便利合集(一)
· C# LINQ 快速入门实战指南,建议收藏学习!
· Redis实现高并发场景下的计数器设计
· 上周热点回顾(4.7-4.13)
点击右上角即可分享
微信分享提示