请教xml生成treeview,
xml文件如下:
<?xml version= "1.0 " standalone= "yes "?>
<NewDataSet>
<Table>
<DEPARTMENTNAME> 全部 </DEPARTMENTNAME>
<DEPARTMENTNAME1> 综合部 </DEPARTMENTNAME1>
<NAME> bonnie </NAME>
</Table>
<Table>
<DEPARTMENTNAME> 全部 </DEPARTMENTNAME>
<DEPARTMENTNAME1> 综合部 </DEPARTMENTNAME1>
<NAME> jakcy </NAME>
</Table>
<Table>
<DEPARTMENTNAME> 全部 </DEPARTMENTNAME>
<DEPARTMENTNAME1> 研究室 </DEPARTMENTNAME1>
<NAME> rose </NAME>
</Table>
<Table>
<DEPARTMENTNAME> 全部 </DEPARTMENTNAME>
<DEPARTMENTNAME1> 宣传办 </DEPARTMENTNAME1>
<NAME> andy </NAME>
</Table>
<Table>
<DEPARTMENTNAME> 全部2 </DEPARTMENTNAME>
<DEPARTMENTNAME1> 临时办公室 </DEPARTMENTNAME1>
<NAME> lili </NAME>
</Table>
<Table>
<DEPARTMENTNAME> 全部2 </DEPARTMENTNAME>
<DEPARTMENTNAME1> 临时办公室 </DEPARTMENTNAME1>
<NAME> john </NAME>
</Table>
</NewDataSet>
我想将这个xml文件生成treeview,样式如下:
全部
综合部
bonnie
jakcy
研究室
rose
宣传办
andy
全部2
临时办公室
lili
john
请教一下,用c#。怎么实现
[解决办法]
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;
}
}
[解决办法]
private void populateTreeControl(System.Xml.XmlNode document, System.Web.UI.WebControls.TreeNodeCollection nodes)
{
TreeNode title = new TreeNode( "省委统战部组织机构 ");
nodes.Add(title);
foreach (System.Xml.XmlNode node in document.ChildNodes)
{
if (!IsSameNode(node))
{
string text = node.ChildNodes[0].InnerText;
TreeNode new_child = new TreeNode(text);
title.ChildNodes.Add(new_child);
text = node.ChildNodes[1].InnerText;
TreeNode sub_child = new TreeNode(text);
new_child.ChildNodes.Add(sub_child);
text = node.ChildNodes[2].InnerText;
TreeNode sub_treenode = new TreeNode(text);
sub_child.ChildNodes.Add(sub_treenode);
}
}
}
private bool IsSameNode(XmlNode node)
{
bool Issamenode = false;
//Response.Write(TreeView1.Nodes.Count.ToString());
foreach (TreeNode childnode in TreeView1.Nodes[0].ChildNodes)
{
if (node.ChildNodes[0].InnerText == childnode.Text)
{
foreach (TreeNode sub_node in childnode.ChildNodes)
{
if (node.ChildNodes[1].InnerText == sub_node.Text)
{
TreeNode childnodes = new TreeNode(node.ChildNodes[2].InnerText);
sub_node.ChildNodes.Add(childnodes);
Issamenode = true;
return Issamenode;
}
}
TreeNode subnode = new TreeNode(node.ChildNodes[1].InnerText);
childnode.ChildNodes.Add(subnode);
TreeNode child_node = new TreeNode(node.ChildNodes[2].InnerText);
subnode.ChildNodes.Add(child_node);
Issamenode = true;
}
}
return Issamenode;
}
具体qq联系 :94131641
哇哈哈