2016-03-21 48 views
0

我试图更新XML文档中的3条数据,但得到“对象引用未设置为对象的实例”错误。这是在XML文件格式,我试图更新:UPdating 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更新不是很熟悉,所以可能会出现一些基本错误。

+0

哪一行引发异常?你应该能够很容易地调试,看看哪个变量为空。 –

+0

General [“AsOfDate”]。InnerText = strAsOfDate; 另外,引发异常时,strAsOfDate不为空。 – overlook77

+0

当您在该行上放置断点时,“常规”变量是否为空?如果不是,那么“General [”AsOfDate]“失败并返回null,意味着.InnerText将抛出您看到的异常。 –

回答

1

我在本地调试这和帕维尔建议,你需要做出关于命名空间的一些变化:

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); 

      XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); 
      nsmgr.AddNamespace("ab", "CompanyName"); 

      XmlNode General; 
      XmlNode root = doc.DocumentElement; 
      General = root.SelectSingleNode("//ab:General", nsmgr); 
      General["AsOfDate"].InnerText = strAsOfDate; 
      General["PriceDate"].InnerText = strPriceDate; 

      doc.Save(strXMLfilepath); 
     } 
    } 
    catch (System.Exception excep) 
    { 
     MessageBox.Show(excep.Message); 
    } 
} 

希望这有助于。

+0

它为什么跳过XmlNode General ;? General是空的,我认为是抛出错误 – overlook77

+0

XmlNode General;只是声明变量。 = root.SelectSingleNode(“// ab:General”,nsmgr);你是在上面的两行新代码中添加的,还改变了root.SelectSingleNode(“// ab:General”,nsmgr); –

+0

是的......我复制并粘贴了你的代码,但它仍然在General [“AsOfDate”]之后立即抛出错误。InnerText = strAsOfDate; – overlook77

相关问题