C#操作XML添加到TreeView节点及节点内容显示问题显示求助

湖白蓝滩 2015-07-25 11:54:39


XML文档加载显示在TreeView已经实现,但是点击TreeView的节点在右侧文本框中显示问题折腾了好久写不好,
预想的效果是节点结构显示到茶壶,前剪这一层就好,后面的名称类型等级可以不用显示,但是搞了好久没有实现,想想就妥协了这样也可以吧。。。
目前是treeView1_AfterSelect这个方法一直写不好,由于本人对XML结构和操作不是很熟悉请大神帮忙改下代码,谢谢啦!!

下面是加载XML文档代码
 treeView1.Nodes.Clear();
try
{
// 打开“打开文档对话框”中的文件
document.Load("SkateData.xml");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "文档不存在或加载文档时出现错误");
return;
}

TreeNode rootNode = treeView1.Nodes.Add("根节点");
rootNode.Tag = document; // 使用树视图的 Tag 属性绑定 XML 根节点

// 将根节点以下的子节点添加到树视图
AddNodeToTreeView2(document, rootNode);



这个是AddNodeToTreeView2代码
 private void AddNodeToTreeView2(XmlNode xn, TreeNode tn)
{
if (xn.Attributes != null)
{
foreach (XmlAttribute att in xn.Attributes)
{
TreeNode newAttNode = tn.Nodes.Add(att.Name.ToString());
newAttNode.Tag = att;
TreeNode newTextNode = newAttNode.Nodes.Add(att.FirstChild.Name);
newTextNode.Tag = att.FirstChild;
}
}
foreach (XmlNode xcn in xn.ChildNodes)
{

TreeNode newTreeNode = tn.Nodes.Add(xcn.Name);
newTreeNode.Tag = xcn;
AddNodeToTreeView2(xcn, newTreeNode);

}
}




这段代码一直写不好,是照着网上别人的例子自己改的,求大神帮忙改下
 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
TreeNode activeNode = treeView1.SelectedNode;
string pattth = "//" + activeNode.Text;
XmlNode xxNode = document.SelectSingleNode(pattth);
foreach (XmlNode xn in xxNode) {
string skatename = xn.Attributes["名称"].Value;
string skateGrade = xn.Attributes["等级"].Value;
string skateType = xn.Attributes["类型"].Value;
string skateInd = xn.Attributes["联系简介"].Value;

//string skatename = (xn.SelectSingleNode("名称")).InnerText;
//string skateGrade = (xn.SelectSingleNode("等级")).InnerText;
//string skateType = (xn.SelectSingleNode("类型")).InnerText;
//string skateInd = (xn.SelectSingleNode("联系简介")).InnerText;
//在窗体中的文本框中显示节点的信息
tbName.Text = skatename;
tbType.Text = skateType;
tbValue.Text = skateGrade;
tbinner.Text = skateInd;
}


当前报的错
...全文
288 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
欲说还休。 2019-03-27
  • 打赏
  • 举报
回复
你好,关于将xml文件加载在treeview中的代码完整版能让我看一下吗?我总是有bug,刚开始学习c#,好多都不懂,十分感谢了!
ajianchina 2015-07-26
  • 打赏
  • 举报
回复
if (layer > 1) continue; 大于多少,自己可以控制层数
ajianchina 2015-07-26
  • 打赏
  • 举报
回复

treeView1.Nodes.Clear();
try
{
	// 打开“打开文档对话框”中的文件
	document.Load("SkateData.xml");
}
catch (Exception ex)
{
	MessageBox.Show(ex.Message, "文档不存在或加载文档时出现错误");
	return;
}

TreeNode rootNode = treeView1.Nodes.Add("根节点");
// 将根节点以下的子节点添加到树视图
AddNodeToTreeView2(document.ChildNodes[1], rootNode, 0);

private void AddNodeToTreeView2(XmlNode xn, TreeNode tn, int layer)
{
    foreach (XmlNode xcn in xn.ChildNodes)
    {
        if (layer > 1) continue;
        TreeNode newTreeNode = tn.Nodes.Add(xcn.Name);
        AddNodeToTreeView2(xcn, newTreeNode, layer + 1);
    }
}
湖白蓝滩 2015-07-26
  • 打赏
  • 举报
回复
引用 2 楼 ajianchina 的回复:

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
TreeNode activeNode = treeView1.SelectedNode;
string pattth = "//" + activeNode.Text;
XmlDocument document = new XmlDocument();
XmlNode xxNode = document.SelectSingleNode(pattth);
foreach (XmlNode node in xxNode.ChildNodes)
{
switch(node.Name)
{
case "名称":
tbName.Text = node.Value;
break;
case "等级":
tbValue.Text = node.Value;
break;
case "类型":
tbType.Text = node.Value;
break;
case "练习简介":
tbinner.Text = node.Value;
break;
default: break;
}
}
}


非常感谢大神帮我修改,不过这样无法显示,Value的值显示为NULL,我把Value修改为InnerText就能正常显示了
还有一个问题能不能将xml显示到treeview时只显示到第三层 也就是名称类型等级这几个节点不显示出来
湖白蓝滩 2015-07-26
  • 打赏
  • 举报
回复
引用 5 楼 ajianchina 的回复:

treeView1.Nodes.Clear();
try
{
	// 打开“打开文档对话框”中的文件
	document.Load("SkateData.xml");
}
catch (Exception ex)
{
	MessageBox.Show(ex.Message, "文档不存在或加载文档时出现错误");
	return;
}

TreeNode rootNode = treeView1.Nodes.Add("根节点");
// 将根节点以下的子节点添加到树视图
AddNodeToTreeView2(document.ChildNodes[1], rootNode, 0);

private void AddNodeToTreeView2(XmlNode xn, TreeNode tn, int layer)
{
    foreach (XmlNode xcn in xn.ChildNodes)
    {
        if (layer > 1) continue;
        TreeNode newTreeNode = tn.Nodes.Add(xcn.Name);
        AddNodeToTreeView2(xcn, newTreeNode, layer + 1);
    }
}
谢谢,终于解决了,但是这个AddNodeToTreeView2(document.ChildNodes[1], rootNode, 0);这样的话会导致treeview节点只显示一个根节点,我把document.ChildNodes[1]改成回document 就能够正常展开了,这两个问题折腾我好久,真的谢谢大神昨天这么晚还帮我看,真的谢谢了
ajianchina 2015-07-26
  • 打赏
  • 举报
回复
多了一行XmlDocument document = new XmlDocument() 这个不需要

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    TreeNode activeNode = treeView1.SelectedNode;
    string pattth = "//" + activeNode.Text;
    XmlNode xxNode = document.SelectSingleNode(pattth);
    foreach (XmlNode node in xxNode.ChildNodes)
    {
        switch(node.Name)
        {
            case "名称":
                tbName.Text = node.Value;
                break;
            case "等级":
                tbValue.Text = node.Value;
                break;
            case "类型":
                tbType.Text = node.Value;
                break;
            case "练习简介":
                tbinner.Text = node.Value;
                break;
            default: break;
        }
    }
}
ajianchina 2015-07-26
  • 打赏
  • 举报
回复

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    TreeNode activeNode = treeView1.SelectedNode;
    string pattth = "//" + activeNode.Text;
    XmlDocument document = new XmlDocument();
    XmlNode xxNode = document.SelectSingleNode(pattth);
    foreach (XmlNode node in xxNode.ChildNodes)
    {
        switch(node.Name)
        {
            case "名称":
                tbName.Text = node.Value;
                break;
            case "等级":
                tbValue.Text = node.Value;
                break;
            case "类型":
                tbType.Text = node.Value;
                break;
            case "练习简介":
                tbinner.Text = node.Value;
                break;
            default: break;
        }
    }
}
湖白蓝滩 2015-07-25
  • 打赏
  • 举报
回复
XML文档结构如下
<?xml version="1.0" encoding="utf-8"?>
<技能大全>
 <平花第一阶段动作 >
	<前剪>
		<名称>前剪</名称>
		<类型>平花</类型>
		<等级>D级</等级>
		<练习简介>首先</练习简介>
	</前剪>
	<哈哈>
		<名称>吼你</名称>
		<类型>平花</类型>
		<等级>D级</等级>
		<练习简介>首先</练习简介>
	</哈哈>
 </平花第一阶段动作>
 <平花第二阶段动作>
	<啥啥啥>
		<名称>啥啥啥</名称>
		<类型>平花</类型>
		<等级>D级</等级>
		<练习简介>首先单脚茶壶破20个桩,之后呢就练习单轮的姿势。茶壶分为睡姿和坐姿,先练坐的吧,坐的比较容易学,坐会了睡的也立马也会拉。也有鞋子的原因,可能有的睡比坐的简单~
					1单轮茶壶首先学坐 ,坐不稳是脚没用力
					2然后是伸脚 ,伸脚就会走谝,练玛丽吧
					3张开手的姿势 , 两手轻松的张开
					4抬脚 ,抬脚就摔,练后单轮半个月左右走10米应该没问题</练习简介>
	</啥啥啥>
  </平花第二阶段动作>
  <刹车第一阶段动作>
	<双杀>
		<名称>第三方</名称>
		<类型>刹车</类型>
		<等级>D级</等级>
		<练习简介>哈哈哈哈</练习简介>
	</双杀>
	<三杀>
		<名称>互动式</名称>
		<类型>刹车</类型>
		<等级></等级>
		<练习简介>菜市场可能</练习简介>
	</三杀>
  </刹车第一阶段动作>
 </技能大全>

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧