怎样用递归将xml文件内容添加到树形控件里

MicroX.S.r 2011-04-21 11:57:14
要求将xml文件中的内容显示在树形控件里面!
我用递归写的!
可是我写的每个节点的最内层都一样,我很纳闷!
我感觉递归方法里面应该添加一个判断id是否与parentid然后再往子节点添加,可是代码不知道怎么写!
光说不行!传代码帮忙研究一下怎么办

这个是xml文件:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!--C#从入门到精通课程结构-->
<知识点 id="321" name="C#从入门到精通" parentid="0" xuhao="1">
<知识点 id="322" name="HelloC#--认识C#" parentid="321"

xuhao="1">
<知识点 id="323" name="C#简介" parentid="322" xuhao="1" />
<知识点 id="324" name="C#程序运行平台——.NET框架"

parentid="322" xuhao="2" />
<知识点 id="325" name="C#程序开发利器——集成开发环境Visual

Studio 2008" parentid="322" xuhao="2" />
<知识点 id="326" name="创建第一个C#程序" parentid="322"

xuhao="4" />
<知识点 id="327" name="使用帮助" parentid="322" xuhao="5" />
</知识点>
<知识点 id="328" name="C#程序开发基础——C#语法入门"

parentid="321" xuhao="2">
<知识点 id="333" name="数据类型" parentid="328" xuhao="1" />
<知识点 id="334" name="常量与变量" parentid="328" xuhao="2" />
<知识点 id="335" name="运算符和表达式" parentid="328" xuhao="3"

/>
<知识点 id="336" name="求异存同——类型转换" parentid="328"

xuhao="4" />
<知识点 id="337" name="复杂的数据类型——数组和枚举"

parentid="328" xuhao="5" />
</知识点>
<知识点 id="329" name="C#程序开发基础——程序控制结构"

parentid="321" xuhao="3">
<知识点 id="373" name="赋值和注释语句" parentid="329"

xuhao="1">
<知识点 id="377" name="赋值语句" parentid="373" xuhao="1" />
<知识点 id="378" name="注释语句" parentid="373" xuhao="2" />
</知识点>
<知识点 id="374" name="选择正确的道路——分支结构"

parentid="329" xuhao="2">
<知识点 id="379" name="if语句" parentid="374" xuhao="1" />
<知识点 id="380" name="switch结构" parentid="374" xuhao="2" />
</知识点>
<知识点 id="375" name="循环结构" parentid="329" xuhao="3">
<知识点 id="381" name="while循环" parentid="375" xuhao="1" />
<知识点 id="382" name="for循环" parentid="375" xuhao="2" />
<知识点 id="383" name="foreach循环" parentid="375" xuhao="3" />
</知识点>
<知识点 id="376" name="字符串操作" parentid="329" xuhao="4">
<知识点 id="384" name="静态串String" parentid="376" xuhao="1"

/>
<知识点 id="385" name="动态串StringBuilder" parentid="376"

xuhao="2" />
</知识点>
</知识点>
<知识点 id="330" name="主流软件开发方法——面向对象入门"

parentid="321" xuhao="4">
<知识点 id="386" name="从特殊到一般——C#中的类"

parentid="330" xuhao="1" />
<知识点 id="387" name="从一般到特殊——C#中的对象"

parentid="330" xuhao="2" />
<知识点 id="388" name="分部类" parentid="330" xuhao="3" />
<知识点 id="389" name="结构与类" parentid="330" xuhao="4" />
<知识点 id="390" name="命名空间" parentid="330" xuhao="5" />
</知识点>
<知识点 id="331" name="深入了解面向对象——面向对象的重要特

征" parentid="321" xuhao="5">
<知识点 id="391" name="子承父业——继承" parentid="331"

xuhao="1" />
<知识点 id="392" name="蝌蚪和青蛙——多态" parentid="331"

xuhao="2" />
<知识点 id="393" name="统一的标准——接口" parentid="331"

xuhao="3" />
<知识点 id="394" name="抽象类和密封类" parentid="331" xuhao="4"

/>
<知识点 id="395" name="委托、事件和索引器" parentid="331"

xuhao="5" />
</知识点>
<知识点 id="332" name="特殊的类——集合与泛型" parentid="321"

xuhao="6">
<知识点 id="396" name="集合" parentid="332" xuhao="1" />
<知识点 id="397" name="动态数组——ArrayList类" parentid="332"

xuhao="2" />
<知识点 id="398" name="HashTable类" parentid="332" xuhao="3" />
<知识点 id="399" name="通用类型——泛型" parentid="332"

xuhao="4" />
</知识点>
</知识点>


下面是我写的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Xml;

namespace 操作xml
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)
{
string str = "";
XmlDocument doc = new XmlDocument();
doc.Load("C#从入门到精通.xml");

DiGui(doc, str, null);

}

public void DiGui( XmlDocument doc,string str,TreeNode xtn)//此处貌似需加一个参数,我加了出不来又删了怎么办?
{
str = str + "/知识点";
XmlNodeList nodes = doc.SelectNodes(str);

foreach (XmlNode node in nodes)
{
TreeNode tn = new TreeNode();

tn.Name = node.Attributes["parentid"].Value;
tn.Text = node.Attributes["name"].Value;
if (tn.Name == "0")
{
this.treeView1.Nodes.Add(tn);
}
else
{
xtn.Nodes.Add(tn);

}

DiGui(doc, str, tn);
}
//this.treeView1.ExpandAll();
}

}
}


I need your help!
想的头都大了!
...全文
210 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
机器人 2011-04-22
  • 打赏
  • 举报
回复
 private void Form1_Load(object sender, EventArgs e)
{
var xmlDoc = new XmlDocument();
xmlDoc.Load("XmlFile1.xml");

var xmlNodes = xmlDoc.SelectNodes("/知识点");
AddNodes(null, xmlNodes);
}

private void AddNodes(TreeNode parent, XmlNodeList nodes)
{
foreach (XmlNode node in nodes)
{
var name = node.Attributes["name"].Value;
var id = node.Attributes["id"].Value;

var treeNode = new TreeNode { Name = id, Text = name };
if (parent == null)
treeView1.Nodes.Add(treeNode);
else
parent.Nodes.Add(treeNode);

AddNodes(treeNode, node.ChildNodes);
}
}
MicroX.S.r 2011-04-22
  • 打赏
  • 举报
回复
我第一次用递归,还不是很成熟!希望大家能够给我帮助!小弟感激不尽!
cjh200102 2011-04-22
  • 打赏
  • 举报
回复
楼上正解。

[Quote=引用 2 楼 fangxinggood 的回复:]

C# code
private void Form1_Load(object sender, EventArgs e)
{
var xmlDoc = new XmlDocument();
xmlDoc.Load("XmlFile1.xml");

var xmlNodes = xmlDoc.SelectNodes("/知识点");
AddNodes(……
[/Quote]

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧