2016-03-21 4 views
0

Ich versuche, 3 Daten in einem XML-Dokument zu aktualisieren, aber einen Fehler "Objektreferenz nicht auf eine Instanz eines Objekts festgelegt". Dies wird das XML-Dateiformat Ich versuche zu aktualisieren: DieseUPDATE XML, erhalten "Objektreferenz nicht auf eine Instanz eines Objekts festgelegt"

<?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> 

ist der C# -Code, der den Fehler zu werfen:

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

Kann jemand das Problem? Ich bin nicht sehr vertraut mit der Aktualisierung von XML, so dass hier etwas Grundlegendes falsch sein kann.

+0

Welche Zeile wirft die Ausnahme? Sie sollten in der Lage sein, dies leicht zu debuggen und zu sehen, welche Variable null ist. –

+0

Allgemein ["AsOfDate"]. InnerText = strAsOfDate; Außerdem ist strAsOfDate nicht null, wenn die Ausnahme ausgelöst wird. – overlook77

+0

Wenn Sie einen Haltepunkt in dieser Zeile platzieren, ist die Variable "General" null? Wenn nicht, dann schlägt der "General [" AsOfDate] "fehl und gibt null zurück, was bedeutet, dass der .InnerText die Ausnahme auslöst, die Sie sehen. –

Antwort

1

Ich habe diese lokal debuggt und als Pawel schon sagt, müssen Sie einige Änderungen in Bezug auf Namensräume machen:

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

Hoffnung, das hilft.

+0

Warum überspringt XmlNode General ;? General ist Null, was ich denke, was den Fehler wirft. – overlook77

+0

XmlNode General, deklariert nur die Variable. Es wird bei General festgelegt = root.SelectSingleNode ("// ab: General", nsmgr); Haben Sie zwei neue Codezeilen oben hinzugefügt und ändern Sie root.SelectSingleNode ("// ab: General", nsmgr); ?? –

+0

Ja ... Ich habe Ihren Code kopiert und eingefügt, aber der Fehler wird immer noch direkt nach General ["AsOfDate"] angezeigt. InnerText = strAsOfDate; – overlook77

Verwandte Themen