递归遍历XML生成树
2008-08-05 09:53
204 查看
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;
}
}
======================================================
供测试XML
<?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>
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;
}
}
======================================================
供测试XML
<?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>
相关文章推荐
- 递归遍历XML生成树
- c#递归生成XML实例
- 遍历指定文件夹下所有的xml文件并动态生成HTML页面
- 递归遍历xml
- 【转】循环递归遍历XML文档或按某要求遍历XML文档
- 递归遍历XML文档
- 关于‘Dom4j递归遍历XML所有元素 ’的一点看法
- dom4j递归遍历XML的所有元素
- 递归遍历磁盘下的某一文件夹中所有文件,并copy文件生成文件和带文件夹的文件
- 递归复习:二叉树递归遍历(二叉树生成,前序、中序、后序遍历)
- Dom4j递归遍历XML所有元素
- 递归遍历XML所有节点
- jquery递归遍历xml文件,形成ul-li序列,生成树结构(使用了treeview插件)
- 遍历 XML 文件所有节点的实例代码(递归调用)
- Java递归遍历XML所有元素
- 简单的XML文件操作(xml文件生成,节点追加、遍历、修改、删除)
- 非递归遍历目录和文件,生成指定文件类型的索引
- 递归遍历磁盘下的某一文件夹中所有文件,并copy文件生成文件和带文件夹的文件
- jQuery递归遍历JSON树,生成对应的ul-li组合,形成树形菜单
- Java采用DOM方式递归遍历XML文件内容