it-swarm.com.de

So erhalten Sie den XML-Knotenwert in Zeichenfolge

Ich habe den folgenden Code ausprobiert, um den Wert eines bestimmten Knotens abzurufen, aber beim Laden der XML-Datei wird diese Ausnahme ausgelöst:

Ausnahme:

Daten auf 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;

Modifizierter 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.")
16
Vignesh

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

LoadXml-Methode nimmt Parameter als xml-Daten nicht den xml-Dateipfad

Versuchen Sie diesen Code

   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

Als ich die letzte Bearbeitung Ihrer Frage sah, fand ich die Lösung.

Ersetzen Sie einfach die beiden unteren Zeilen 

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 Ihr Problem lösen, oder Sie können die Lösung verwenden, die ich zuvor bereitgestellt habe. 

23
Rezoan

Sie sollten .Load und nicht .LoadXML verwenden.

MSDN Link

"Die LoadXml-Methode dient zum direkten Laden einer XML-Zeichenfolge. Sie möchten stattdessen die Load-Methode verwenden."

ref: Link

8
Siraj Mansour
XmlDocument d = new XmlDocument();
d.Load(@"D:\Work_Time_Calculator\10-07-2013.xml");
XmlNodeList n = d.GetElementsByTagName("Short_Fall");
if(n != null) {
    Console.WriteLine(n[0].InnerText); //Will output '08:29:57'
}

or you could wrap in foreach loop to print each value

XmlDocument d = new XmlDocument();
d.Load(@"D:\Work_Time_Calculator\10-07-2013.xml");
XmlNodeList n = d.GetElementsByTagName("Short_Fall");
if(n != null) {
    foreach(XmlNode curr in n) {
        Console.WriteLine(curr.InnerText);
    }
}
0
ravula sandeep