2012-10-09 43 views
1

我是.net初学者。在此之前,我经历了许多网站。我收到错误 - “对象引用未设置为对象的实例。” 。这个错误通常是在任何控件中有空值的时候,但在我的情况下,每个控件都有一些文本,那么为什么会出现这个错误?这里是我的xml fileLinq中的空引用异常

cmbProduct  --> combobox 
txtNewBrand  --> textBox 
txtUpdateQuantity --> textBox 
txtUpdatePrice --> textBox 

我尝试下面的代码:

onButtonClick

XElement doc = XElement.Load(@"..\..\stock.xml"); 
var newElement = new XElement("items", 
           new XElement("productname", cmbProduct.Text), 
           new XElement("brandname", txtNewBrand.Text), 
           new XElement("quantity", txtUpdateQuantity.Text), 
           new XElement("price", txtUpdatePrice.Text)); 
/*ERROR*/  doc.Element("stock").Add(newElement); 
       doc.Save(xpath); 
       MessageBox.Show("updated successfully"); 

编辑:

而不是使用

XElement doc = XElement.Load(@"..\..\stock.xml"); 

我用

var doc = XDocument.Load(@"..\..\stock.xml"); 

和问题解决。为什么这样?

+2

你在哪里加载'doc'? –

+1

检查那个doc.Element(“stock”)实际上有一个值并且不返回null。 –

+1

似乎像doc是空的? – MrEdge

回答

1

因为:

doc.Element("stock").Add(newElement); 

stock是根节点,doc.Element("stock")返回null。你实际上想要做的是在你的xml中添加一个项目。请尝试以下操作:

doc.Add(newElement); 

这会给你想要的结果。

+0

我不知道根节点有不同的功能。谢谢。 –

+0

@Mr_Green,不客气 – Habib

1

eather doc.Element(“股票”)不能被发现是空或文档是空

1

鉴于有限的代码是不容易看到您已经添加了什么和/或断言存在。尝试在错误上方添加这两行,并且错误消息将指示错误。

Debug.Assert(doc != null, "Can not operate without a valid instance of 'doc'"); 
Debug.Assert(doc.Element("stock") != null, "Need the stock element to add to!"); 

您可能需要包含“using System.Diagnostics;”在文件的顶部。

+0

它显示这些诊断..我不能理解http://i47.tinypic.com/25u1enn。jpg –

+0

第一行是“需要添加到的库存元素” - 这是我说要插入的代码的第二行。因此,您需要向文档添加“库存”。例如'var stock = doc.Add(new Element(“stock”));'并将你的行改为'stock.Add(newElement)' –

+0

好吧,只是为了checkin我添加了'var doc = XDocument.Load(@“.. \ .. \ stock.xml“);'这工作。为什么我不明白。这个代码'XElement doc = XElement.Load(@“.. \ .. \ stock.xml”);'在这里变得没用了? –

1

我想你没有用现有的XML预加载doc,如果是这样,就不会有任何stock元素开始。

尝试增加你得到外,这个

if (doc.Element("stock") == null) 
{ 
    doc.Add(new XElement("stock")); 
} 

doc.Element("stock").Add(newElement);