最近在用xml写一个树形结构,在自己的研究和师兄的帮助下终于完成了,我把我写的东西写出来也算是自己的一点心得大家分享一下。
xml语言的组成我就不详细介绍了,这里主要说一下xml里的元素,其中每一个元素代表一个节点,这个节点可以可treeview的节点通过tag数据关联起来这样就可以通过treeview的节点找到xml里的节点即元素对其进行增删改等操作。至于怎么关联我在下边的例子里会写到。先给一个我自己写的xml的例子。
<?xml version="1.0" encoding="gb2312"?>
<流程树 id="-1">
<一般工艺流程 id="0" 信息描述="用于工艺工作的各种流程建模">
<工艺审核流程 id="01" 创建人="李珊" 创建时间="2008" 信息描述="用于工艺的审核、校对的流程模型" />
<工艺设计流程 id="02" 创建人="马文" 创建时间="2008" 信息描述="工艺设计流程的模型" />
<工艺校对流程 id="03" 创建人="林汉琳" 创建时间="2008" 信息描述="用于工艺校对的流程" />
</一般工艺流程>
<工艺更改流程 id="1" 信息描述="工艺更改流程">
<箱体工艺更改流程 id="11" 创建人="宏冰" 创建时间="2005" 信息描述="用于箱体的工艺更改流程" />
</工艺更改流程>
<校对流程 id="2" 信息描述="用于校对的流程">
<工艺校对流程 id="20" 创建人="李珊" 创建时间="2005" 信息描述="用于校对的流程">
</工艺校对流程>
</校对流程>
<任务变更流程 id="3" 信息描述="任务变更的流程" />
<审批流程 id="4" 信息描述="用于审批的流程">
</审批流程>
</流程树>
1、现讲一下如何把xml的节点加到treeview上
XmlDocument xmldoc = new XmlDocument();//实例化xml文档
xmldoc.Load("flow.xml");//加载xml文档
treeV_flow.Nodes.Clear();//清空treeview的节点
TreeNode tnode = new TreeNode(xmldoc.DocumentElement.Name);//把xml的根节点加载在treeview
tnode.Tag = xmldoc.DocumentElement.Attributes.GetNamedItem("id").Value;//通过元素的属性与根节点的数据关联
treeV_flow.Nodes.Add(tnode);//将根节点添加到treeview上
AddNode(xmldoc.DocumentElement, treeV_flow.Nodes[0]);//调用添加节点的方法Add()将子节点添加到树上
treeV_flow.ExpandAll();//treeview展开所有节点
public void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)//添加节点到treeview节点上
{
foreach (XmlNode node in inXmlNode.ChildNodes)//遍历xml文档的所有子节点
{
string str = node.Name;//xml子节点的名称
TreeNode tNode = new TreeNode(str);//xml子节点的名称赋给treeview节点
if (node.Attributes != null)//xml与treeview子节点的数据关联
{
if (node.Attributes.GetNamedItem("id") != null)
{
tNode.Tag = node.Attributes.GetNamedItem("id").Value.ToString();
}
}
inTreeNode.Nodes.Add(tNode);
AddNode(node, tNode);//
}
}
2、通过选择treeview上的节点查看相对应的xml元素的信息
private void LookFlow()//查看流程信息
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("flow.xml");
XmlElement root = xmldoc.DocumentElement;//获取根元素
XmlNodeList xlist = root.ChildNodes;//获取所有子元素的集合
if (this.nodelevel == 1)//如果当前选择的节点处在treeview的第一层上
{
foreach (XmlNode node in xlist)
{
if (node.Attributes.GetNamedItem("id").Value == this.NodeTag)
{
this.tb_id.Text = node.Attributes.GetNamedItem("id").Value;
this.tb_name.Text = node.Name;
this.tb_note.Text = node.Attributes.GetNamedItem("信息描述").Value;
break;
}
}
}
else if (this.nodelevel == 2)
{
foreach (XmlNode node in xlist)
{
XmlNodeList nodelist = node.ChildNodes;
foreach (XmlNode childnode in nodelist)
{
if (childnode.Attributes.GetNamedItem("id").Value == this.NodeTag)
{
this.tb_id.Text = childnode.Attributes.GetNamedItem("id").Value;
this.tb_name.Text = childnode.Name;
this.tb_man.Text = childnode.Attributes.GetNamedItem("创建人").Value;
this.tb_note.Text = childnode.Attributes.GetNamedItem("信息描述").Value;
this.tb_time.Text = childnode.Attributes.GetNamedItem("创建时间").Value;
break;
}
}
}
就写这些吧我自是明白了就不知道我这样写大家能不能明白有问题大家可以一起讨论。