Xml TreeView

By James Divine

Download Source XmlTreeView.zip

Article Description

The application shown here was my first adventure into Xml in the .Net platform. My goal was to be able to reflect any Xml file into the Windows Forms TreeView control. I found various examples online, but none I found were suited for opening all Xml files, rather they were suited to one schema or another.

The problem I ran into while writing this was more of a programming theory issue than a coding issue. This example deals with two instances of recursion, one for reading the Xml file in and one for adding the data correctly to the TreeView control. I am aware that this application reinvents the wheel, since Internet Explorer gives the exact same functionality, but I was more interested in learning how to work with Xml files within the .Net Platform, especially using the XmlDocument class and this seemed like a good start.

The following code snippet shows the method I used to accomplish my goal.

private void FillTree(XmlNode node, TreeNodeCollection parentnode)
{
	// End recursion if the node is a text type
	if(node == null || node.NodeType == XmlNodeType.Text || node.NodeType == XmlNodeType.CDATA)
		return;

	TreeNodeCollection tmptreenodecollection = AddNodeToTree(node, parentnode);

	// Add all the children of the current node to the treeview
	foreach(XmlNode tmpchildnode in node.ChildNodes)
	{
		FillTree(tmpchildnode, tmptreenodecollection);
	}
}

private TreeNodeCollection AddNodeToTree(XmlNode node, TreeNodeCollection parentnode)
{
	TreeNode newchildnode = CreateTreeNodeFromXmlNode(node);

	// if nothing to add, return the parent item
	if(newchildnode == null) return parentnode;

	// add the newly created tree node to its parent
	if(parentnode != null) parentnode.Add(newchildnode);

	return newchildnode.Nodes;
}

private TreeNode CreateTreeNodeFromXmlNode(XmlNode node)
{
	TreeNode tmptreenode = new TreeNode();

	if((node.HasChildNodes) && (node.FirstChild.Value != null))
	{
		tmptreenode = new TreeNode(node.Name);
		TreeNode tmptreenode2 = new TreeNode(node.FirstChild.Value);
		tmptreenode.Nodes.Add(tmptreenode2);
	}
	else if(node.NodeType != XmlNodeType.CDATA) 
	{
		tmptreenode = new TreeNode(node.Name);
	}

	return tmptreenode;
}
 

About the Author: James Divine (james@4divine.com) is a Senior Software Developer with over 12 years experience working with web programming, desktop application programming, server application programming and handheld device programming. He has been working in .Net and C# for more than two years. James currently holds a Microsoft Certified Professional certification and is working towards the MCSD.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值