【发布时间】:2016-03-22 00:41:08
【问题描述】:
我正在尝试更新 XML 文档中的 3 条数据,但收到“对象引用未设置为对象实例”错误。这是我要更新的 XML 文件格式:
<?xml version="1.0" encoding="US-ASCII" standalone="true"?>
<ExportSettings xmlns="CompanyName" ExportName="Data Export" Dataset="TestName">
<General>
<AsOfDate>03/31/15</AsOfDate>
<PriceDate>03/31/16</PriceDate>
</General>
<Source>
<Set>Set Name</Set>
</Source>
</ExportSettings>
这是引发错误的 C# 代码:
private void btnUpdate_Click(object sender, EventArgs e)
{
try
{
{
string strAsOfDate = dateTimePickerAsOfDate.Text;
string strPriceDate = dateTimePickerPriceDate.Text;
string strSetName = txtboxSet.Text;
XmlDocument doc = new XmlDocument();
doc.Load(strXMLfilepath);
XmlNode General;
XmlNode root = doc.DocumentElement;
General = root.SelectSingleNode("/ExportSettings/General");
General["AsOfDate"].InnerText = strAsOfDate;
General["PriceDate"].InnerText = strPriceDate;
XmlNode Source;
Source = root.SelectSingleNode("/ExportSettings/Source");
Source["Set"].InnerText = strSetName;
doc.Save(strXMLfilepath);
}
}
catch (System.Exception excep)
{
MessageBox.Show(excep.Message);
}
}
任何人都可以看到问题吗?我对更新 XML 不是很熟悉,所以这里可能存在一些基本错误。
【问题讨论】:
-
哪一行抛出异常?您应该能够轻松调试它并查看哪个变量为空。
-
常规["AsOfDate"].InnerText = strAsOfDate;此外,抛出异常时 strAsOfDate 不为空。
-
当您在该行放置断点时,“General”变量是否为空?如果不是,那么 "General["AsOfDate]" 失败并返回 null 意味着 .InnerText 将抛出您看到的异常。
-
您的元素位于
CompanyName命名空间中,并且您要求的元素不属于任何命名空间。结果,SelectSingleNode 返回 null 并且对该值的任何操作都会导致 NullReferenceException。 -
好的,所以 General 确实保持为空。调试器跳过“XmlNode General;”行,然后在查看 "General["AsOfDate"].InnerText = strAsOfDate;" 后引发异常