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

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

    首先我先贴1段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内容。在这里我多介绍1段关于寻觅程序集路径的代码,我做项目习惯于将xml文件放在程序集bin/Debug下,缘由也是c#提供了此访问方式。

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

public String GetAssemblyFileDirectory()
{
#region 变量说明
String FilePath, StringX;
FileInfo FileInfoX;//这里我创建的操作文件夹的类,固然你你也能够用其它方式
Uri UriX;
#endregion

#region 获得.dll的位置

//获得.dll文件的位置,主要是用于肯定数据库文件
StringX = Assembly.GetCallingAssembly().CodeBase;
//生成1个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");//获得结点nativeplace
nodes = 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; //创建1个xml元素,将获得的每个结点转换成xml元素,方便对其进行属性赋值。
TreeNode newTreeNode = new TreeNode();//创建1个新的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);//孙子结点加载
}
}
}

   这样我们就创建好了1个目录树,接下来我展现1下我之前创建好的1个目录树的效果图:

有时我们需要获得treenode的text,但是,当我们点击1个结点时如何获得完全的结点名呢(就是加上其所有父节点的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相应的列,大家可以不用管,现在你可以用监视去查看1下fullText.Text就会显示完全的目录名了。
}


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


至此xml加载到treeview的方法介绍终了!



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

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » [置顶] c#如何实现从xml中加载树目录,并且显示完整的Text

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡