Как получить значение xml node в строке
Я попробовал приведенный ниже код, чтобы получить значение определенного node, но при загрузке xml это исключение выбрано:
Исключение:
Данные на корневом уровне недействительны. Строка 1, позиция 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>
С#
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;
Измененный код
С#
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.")
Ответы
Ответ 1
Проблема в вашем коде - xml.LoadXml(filePath);
Метод LoadXml принимает параметр как XML-данные, а не путь к файлу xml
Попробуйте этот код
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;
}
Edit
Увидев последнее изменение вашего вопроса, я нашел решение,
просто замените ниже 2 строки
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.")
с
string id = xml.SelectSingleNode("Data/Short_Fall").InnerText;
он должен решить вашу проблему, или вы можете использовать ранее предоставленное решение.
Ответ 2
Вы должны использовать .Load
, а не .LoadXML
Ссылка MSDN
"Метод LoadXml предназначен для загрузки строки XML напрямую. Вместо этого вы хотите использовать метод Load."
ref: Ссылка