2013-07-11 5 views
14

ich den Code unten versucht, den Wert eines bestimmten Knoten zu erhalten, aber beim Laden des XML diese Ausnahme ausgelöst wird:Wie den XML-Knoten Wert in String erhalten

Ausnahme:

Daten auf der Stammebene sind ungültig. Zeile 1, Position 1.

XML

<?xml version="1.0"?> 
<Data xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Date>11-07-2013</Date> 
    <Start_Time>PM 01:37:11</Start_Time> 
    <End_Time>PM 01:37:14</End_Time> 
    <Total_Time>00:00:03</Total_Time> 
    <Interval_Time/> 
    <Worked_Time>00:00:03</Worked_Time> 
    <Short_Fall>08:29:57</Short_Fall> 
    <Gain_Time>00:00:00</Gain_Time> 
</Data> 

C#:

XmlDocument xml = new XmlDocument(); 
filePath = @"D:\Work_Time_Calculator\10-07-2013.xml"; 
xml.LoadXml(filePath); // Exception occurs here 
XmlNode node = xml.SelectSingleNode("/Data[@*]/Short_Fall"); 
string id = node["Short_Fall"].InnerText; 

Modified-Code

C#:

XmlDocument xml = new XmlDocument(); 
filePath = @"D:\Work_Time_Calculator\10-07-2013.xml"; 
xml.Load(filePath); 
XmlNode node = xml.SelectSingleNode("/Data[@*]/Short_Fall"); 
string id = node["Short_Fall"].InnerText; // Exception occurs here ("Object reference not set to an instance of an object.") 
+0

möglich Duplikat von [Daten auf der Root-Ebene ist ungültig] (http://stackoverflow.com/questions/5748668/data-at-the-root-level-is-invalid) –

+0

Warum verwenden Sie nicht LINQ zu XML? Es ist viel einfacher und benutzerfreundlicher als die alte XmlDocument-Klasse. – MarcinJuraszek

Antwort

20

Das Problem in Ihrem Code ist xml.LoadXml(filePath);

LoadXml Methode take Parameter als XML-Daten nicht die XML-Dateipfad

diesen Code Versuchen

string xmlFile = File.ReadAllText(@"D:\Work_Time_Calculator\10-07-2013.xml"); 
XmlDocument xmldoc = new XmlDocument(); 
xmldoc.LoadXml(xmlFile); 
XmlNodeList nodeList = xmldoc.GetElementsByTagName("Short_Fall"); 
string Short_Fall=string.Empty; 
foreach (XmlNode node in nodeList) 
{ 
    Short_Fall = node.InnerText; 
} 

bearbeiten

die letzte Bearbeitung Ihrer Frage Sehen ich die Lösung gefunden,

Nur die zweite Zeile unter ersetzen

XmlNode node = xml.SelectSingleNode("/Data[@*]/Short_Fall"); 
string id = node["Short_Fall"].InnerText; // Exception occurs here ("Object reference not set to an instance of an object.") 

mit

string id = xml.SelectSingleNode("Data/Short_Fall").InnerText; 

Es sollte lösen Ihr Problem oder Sie können die Lösung verwenden, die ich zuvor bereitgestellt habe.

7

sollten Sie .Load verwenden und nicht .LoadXML

MSDN Link

„Die LoadXml Methode ist direkt eine XML-Zeichenfolge für das Laden. Sie wollen stattdessen die Load-Methode verwenden“

Ref.: Link

+0

Ich verwendete Load-Methode jetzt Ausnahme wird nicht ausgelöst, aber "Objektreferenz nicht auf eine Instanz eines Objekts festgelegt." wird auf die Zeile id = node ["Short_Fall"] geworfen.Innerer Text; – Vignesh

+0

Ich denke, es ist, weil Sie bereits bei Short_Fall sind, wie Sie in Ihrer vorherigen Zeile xml.SelectSingleNode ("/ Data [@ *]/Short_Fall"); –

+0

so, wie dieser bestimmte Knoten Wert – Vignesh

Verwandte Themen