c#如何实现从xml中加载树目录,并且显示完整的Text

谈到xml,相信有一定编程基础的童鞋们都比较清楚了。xml文件格式类似于嵌套的样式,这种独特的层次结构很容易使我们联想到目录树,因此这不禁让我们对两者之间产生一种牵线的想法。这不禁,使我们有这么一个问题:如何将xml存储的数据转换成目录树形式??

首先我先贴一段xml代码:

<nativeplace><China text="中国" value="中国"><ShanDong text="山东" value="山东"><JiNing text="济宁" value="济宁"><RenChengQu text="任城区" value="任城区"><ChangGouZhen text="长沟镇" value="长沟镇"></ChangGouZhen></ReChengQu></JiNing></ShanDong></China></nativeplace> 这段代码很清楚的展示给我们他们之间的层次关系,接下来,我们就将此xml中的区域与c#的TreeView进行联系,从而达到我们想要的目录树效果。

首先我们需要将xml加载到TreeView中。加载xml也就是我们所说的找到xml然后读取xml内容。在这里我多介绍一段关于寻找程序集路径的代码,我做项目习惯于将xml文件放在程序集bin/Debug下,原因也是c#提供了此访问方式。

接下来的一段代码便是读取项目的程序集Debug路径的方法:

public String GetAssemblyFileDirectory(){#region 变量说明String FilePath, StringX;FileInfo FileInfoX;//这里我创建的操作文件夹的类,当然你你也可以用其它方式Uri UriX;#endregion#region 获取.dll的位置//获取.dll文件的位置,主要是用于确定数据库文件StringX = Assembly.GetCallingAssembly().CodeBase;//生成一个URI,以用于解析UriX = new Uri(StringX);//获取配置文件的目录FileInfoX = new FileInfo(UriX.LocalPath);FilePath = FileInfoX.DirectoryName;//if (!(FilePath.Substring(FilePath.Length – 1, 1) == @"\&;))//{ FilePath = String.Concat(FilePath, @"\&;); }return FilePath;#endregion}这样我们就获取了xml文件的位置,接下来我们所做的就是加载xml文件。具体代码如下: helper = new Helper();//此类中包含了获取程序集目录的方法xmlpath = helper.GetAssemblyFileDirectory() + "/Resources/Dictionary.xml";XmlDocument xmldoc = new XmlDocument(); //创建xml文档类xmldoc.Load(xmlpath);//加载xml文档xmlNode = xmldoc.DocumentElement.SelectSingleNode("nativeplace");//获取结点nativeplacenodes = xmlNode.ChildNodes;//获取nativeplace结点下的所有孩子结点,此孩子是真孩子结点,并非所有的“后代”结点bindXmlToTreeView(nodes, nativePlaceTreeView.Nodes);//该方法是将xml结点加载到TreeView目录树中接下来我们所做的便是如何遍历nativeplace下所有子结点以及孙子结点等。方法如下:public void bindXmlToTreeView(XmlNodeList nodeList, TreeNodeCollection treeNode){foreach (XmlNode node in nodeList){XmlElement xe = (XmlElement)node; //创建一个xml元素,将获取的每一个结点转换成xml元素,,方便对其进行属性赋值。TreeNode newTreeNode = new TreeNode();//创建一个新的treenode,将xmlnode中信息存到treenode中。newTreeNode.Text = xe.GetAttribute("text");newTreeNode.Name = xe.GetAttribute("value");treeNode.Add(newTreeNode);//将创建并包含信息的treenode加载到treenode集合中。if (node.HasChildNodes){bindXmlToTreeView(node.ChildNodes, newTreeNode.Nodes);//孙子结点加载}}} 这样我们就创建好了一个目录树,接下来我展示一下我之前创建好的一个目录树的效果图:

有时我们需要获取treenode的text,然而,当我们点击一个结点时如何获取完整的结点名呢(就是加上其所有父节点的text)?,其实我们可以这样来实现:

private void okButton_Click(object sender, EventArgs e){parentNode(nativePlaceTreeView.SelectedNode);//这里是将获取的点击结点传递过去this.Close();} private void parentNode(TreeNode text){TreeNode fullText = text;while (text.Parent != null){fullText.Text = text.Parent.Text +fullText.Text;//这样总是获取结点的父节点text。text = text.Parent;//我们text结点是传递过来的点击结点,然后不断将其父节点赋值给它,这样就可以向上推上去了。知道treeview中的根节点。}nativeplace["address"] = fullText.Text;//这里只是将结点的文本复制给传递过来的datarow相应的列,大家可以不用管,现在你可以用监视去查看一下fullText.Text就会显示完整的目录名了。}

点击确定按钮,则在datagridview中显示详细的名字:

至此xml加载到treeview的方法介绍完毕!

再次祝大家元宵节快乐!!

喜欢就该珍惜,珍惜就别放弃。

c#如何实现从xml中加载树目录,并且显示完整的Text

相关文章:

你感兴趣的文章:

标签云: