private void updateTreeView( string filename)
... {
try
...{
treeView1.Nodes.Clear();//清空treeview
XmlDocument tmpxmldoc = new XmlDocument(); //实例化XML文档
tmpxmldoc.Load(filename); //加载XML文档
FillTree(tmpxmldoc.DocumentElement, treeView1.Nodes);
//(参数1:xml的根, treeView的结点集合)
//DocumentElement:回一个在单一根文件元素中包含数据的对象
//如果文件中不包含根节点,将传回null。
}
catch(Exception ex)
...{
this.filename_box.Text = ex.Message;
}
}
private void FillTree(XmlNode node, TreeNodeCollection parentnode)
... {
if(node == null || node.NodeType == XmlNodeType.Text || node.NodeType == XmlNodeType.CDATA)//为null ,或者为内容或转义CDATA等不能有任何子结点。
return;
TreeNodeCollection tmptreenodecollection = AddNodeToTree(node, parentnode);
foreach(XmlNode tmpchildnode in node.ChildNodes) //递归增加现有结点的所有孩子结点。
...{
FillTree(tmpchildnode, tmptreenodecollection);
}
}
private TreeNodeCollection AddNodeToTree(XmlNode node, TreeNodeCollection parentnode)
... {
TreeNode newchildnode = CreateTreeNodeFromXmlNode(node); //从xml节点转化成一个treeview的节点。
if(newchildnode == null) return parentnode; //如果什么都没有,返回父结点的集合
if(parentnode != null) parentnode.Add(newchildnode); //在他的父结点下增加一个新的节点
return newchildnode.Nodes; //返回新节点的集合
}
private TreeNode CreateTreeNodeFromXmlNode(XmlNode node)
... {
TreeNode tmptreenode = new TreeNode();
if((node.HasChildNodes) && (node.FirstChild. != null)) //时候有子节点,该节点第一个自己不为NULL.
...{
tmptreenode = new TreeNode(node.Name);
TreeNode tmptreenode2 = new TreeNode(node.FirstChild.);
tmptreenode.Nodes.Add(tmptreenode2);
}
else if(node.NodeType != XmlNodeType.CDATA)
...{
tmptreenode = new TreeNode(node.Name);
}
return tmptreenode;
}