使用XML文件保存TreeView时ArgumentException

a522612199a 2014-12-21 03:58:33
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;

namespace SellingSystem
{
public partial class ProductDirectory : Form
{
public ProductDirectory()
{
InitializeComponent();
}
XmlDocument doc = new XmlDocument();
private void ProductDirectory_Load(object sender, EventArgs e)
{

}

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if(e.Node.Checked)
{
ProductInfo proInfo = new ProductInfo();
proInfo.Show();
if(e.Node.Text.Equals("Nike")){

}

}
}

private void treeView1_DoubleClick(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
//string [] dr= new string[1];

//DirectoryCreate dc = new DirectoryCreate();
//dc.Show();
if ( treeView1.SelectedNode == null )
{
MessageBox.Show("请选择一个节点", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
} else
{
//创建一个节点对象,并初始化
TreeNode tmp = new TreeNode ( textBox1.Text );
treeView1.LabelEdit = true;
//在TreeView组件中加入子节点
treeView1.SelectedNode.Nodes.Add ( tmp );
treeView1.SelectedNode = tmp ;
treeView1.ExpandAll ( ) ;
treeView1.Update();
}
}

private void button2_Click(object sender, EventArgs e)
{
doc.LoadXml("<XMLTest></XMLTest>");
XmlNode root = doc.SelectSingleNode("XMLTest");
foreach (TreeNode tn1 in treeView1.Nodes)
{
XmlElement Test1 = doc.CreateElement(tn1.Name);
root.AppendChild(Test1);
if (tn1.Nodes != null)
{
ChildNods(tn1, Test1);
}
}
doc.Save("XMLTest.xml");
}
private void ChildNods(TreeNode ParentNode, XmlElement Test)
{
foreach (TreeNode tn in ParentNode.Nodes)
{
XmlElement Ts = doc.CreateElement(tn.Text);
Test.AppendChild(Ts);
if (tn.Nodes != null)
{
ChildNods(tn, Ts);
}
}
}

private void button3_Click(object sender, EventArgs e)
{
treeView1.Nodes.Clear();
XmlDocument document = new XmlDataDocument();
document.Load("XMLTest.xml");
foreach (XmlNode node in document.ChildNodes[0].ChildNodes)
{
TreeNode tn = treeView1.Nodes.Add(node.Name);
if (node.ChildNodes != null)
{
ChildNodes(node, tn);
}
}
}
private void ChildNodes(XmlNode ParentNode, TreeNode tvNode)
{
foreach (XmlNode no in ParentNode.ChildNodes)
{
TreeNode tn = tvNode.Nodes.Add(no.Name);
if (no.ChildNodes != null)
{
ChildNodes(no, tn);
}
}
}


}
}

报错在85行
报错信息是:
“System.ArgumentException”类型的未经处理的异常在 System.Xml.dll 中发生

其他信息: 元素或特性的本地名称不能为空或空字符串。

VS2013
请问怎么解决?
...全文
253 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
EdsionWang 2014-12-22
  • 打赏
  • 举报
回复
72行改成:

  XmlElement Test1 = doc.CreateElement(tn1.Text);
a522612199a 2014-12-22
  • 打赏
  • 举报
回复
引用 3 楼 wow818wow 的回复:
空字符串不是NULL;NULL是表示不存在对象。所以要判断字符串为空或者不存在应该用String.IsNullOrEmpty(tn.Text);
谢谢 修改后86行还是报错 “System.NullReferenceException”类型的未经处理的异常在 System.Xml.dll 中发生 其他信息: 未将对象引用设置到对象的实例。
扯淡砖家 2014-12-22
  • 打赏
  • 举报
回复
空字符串不是NULL;NULL是表示不存在对象。所以要判断字符串为空或者不存在应该用String.IsNullOrEmpty(tn.Text);
扯淡砖家 2014-12-22
  • 打赏
  • 举报
回复
这个异常说明Test.AppendChild(Ts);中的Test是NULL。你调试下看看就知道了。另外支持下5楼的做法
a522612199a 2014-12-21
  • 打赏
  • 举报
回复
还是报一样的错误 create 之前加了tn.Text != Null判断了
exception92 2014-12-21
  • 打赏
  • 举报
回复
tn.Text 是空字符串吧? creat 之前 判断一下

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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