treeView绑定XML文档
在家这两天,共装了两遍系统(郁闷啊。。),现在不能连adsl网络的问题终于解决了(原来是网卡驱动的问题,我晕啊)!!呵呵废话不多说了。要想让treeView绑定XML文档,只需编写一个递归过程就行了。XML代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<!-- 注意:treeview 为根结点,nodes 为父级节点,node 为子节点。
-->
<treeview>
<nodes>
<name>根节点1</name>
<zuozhe />
<liupai />
<link />
<node>
<name>测试节点1 -1</name>
<zuozhe />
<liupai />
</node>
<node>
<name>测试节点1 -2</name>
<zuozhe />
<liupai />
<link />
</node>
</nodes>
<!-- 注意:treeview 为根结点,nodes 为父级节点,node 为子节点。
-->
<treeview>
<nodes>
<name>根节点1</name>
<zuozhe />
<liupai />
<link />
<node>
<name>测试节点1 -1</name>
<zuozhe />
<liupai />
</node>
<node>
<name>测试节点1 -2</name>
<zuozhe />
<liupai />
<link />
</node>
</nodes>
在页面中加一个TreeView控件和一个button控件。写一个递归过程如下:
/// <summary>
/// 构建树。遍历XML所有的节点
/// </summary>
/// <param name="XMLNodes">XML节点</param>
/// <param name="TreeNode">树的当前节点</param>
private void BuildTree(XmlNodeList XMLNodes, TreeNodeCollection treeNodes)
{
string sValue;
for (int i = 0; i < XMLNodes.Count; i++)
{
if (XMLNodes[i].NodeType == XmlNodeType.Element)
{
TreeNode tNode = new TreeNode();
sValue = "";
if (XMLNodes[i].HasChildNodes && XMLNodes[i].ChildNodes.Count == 1 && XMLNodes[i].ChildNodes[0].NodeType == XmlNodeType.Text)
{
sValue = XMLNodes[i].ChildNodes[0].Value;
}
else
{
for (int j = 0; j < XMLNodes[i].Attributes.Count; j++)
{
sValue += XMLNodes[i].Attributes[j].Name + "=" + XMLNodes[i].Attributes[j].Value + ";";
}
}
if (sValue == "")
{
tNode.Text = XMLNodes[i].Name;
}
else
{
tNode.Text = XMLNodes[i].Name + ":" + sValue;
}
treeNodes.Add(tNode);
if(XMLNodes[i].HasChildNodes)
{
BuildTree(XMLNodes[i].ChildNodes, tNode.Nodes);
}
}
双击button,加入以下代码:/// 构建树。遍历XML所有的节点
/// </summary>
/// <param name="XMLNodes">XML节点</param>
/// <param name="TreeNode">树的当前节点</param>
private void BuildTree(XmlNodeList XMLNodes, TreeNodeCollection treeNodes)
{
string sValue;
for (int i = 0; i < XMLNodes.Count; i++)
{
if (XMLNodes[i].NodeType == XmlNodeType.Element)
{
TreeNode tNode = new TreeNode();
sValue = "";
if (XMLNodes[i].HasChildNodes && XMLNodes[i].ChildNodes.Count == 1 && XMLNodes[i].ChildNodes[0].NodeType == XmlNodeType.Text)
{
sValue = XMLNodes[i].ChildNodes[0].Value;
}
else
{
for (int j = 0; j < XMLNodes[i].Attributes.Count; j++)
{
sValue += XMLNodes[i].Attributes[j].Name + "=" + XMLNodes[i].Attributes[j].Value + ";";
}
}
if (sValue == "")
{
tNode.Text = XMLNodes[i].Name;
}
else
{
tNode.Text = XMLNodes[i].Name + ":" + sValue;
}
treeNodes.Add(tNode);
if(XMLNodes[i].HasChildNodes)
{
BuildTree(XMLNodes[i].ChildNodes, tNode.Nodes);
}
}
private void button1_Click(object sender, EventArgs e)
{
XmlDocument doc=new XmlDocument();
doc.Load(@"C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\XMLFile1.xml");
BuildTree(doc.ChildNodes, treeView1.Nodes); ||调用递归
}
{
XmlDocument doc=new XmlDocument();
doc.Load(@"C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\XMLFile1.xml");
BuildTree(doc.ChildNodes, treeView1.Nodes); ||调用递归
}