Парсинг XML: В экземпляре объекта не задана ссылка на объект - C#
Формулировка задачи:
Доброго времени суток! Я хочу разобраться с парсингом XML на примере конфигуратора маршрута. XML с маршрутами подгружается нормально, но при попытке получить значение какого-то атрибута вылетает ошибка "В экземпляре объекта не задана ссылка на объект.", хотя на самом деле такой атрибут есть и даже верно определяется. Правда поле "value" странно имеет значение "null". Скрины и XML прилагаю
Код:
XML:
XmlDocument doc = new XmlDocument(); doc.Load(path); //список маршрутов routeList = new List<Route>(); //считываем список маршрутов из файла миссии int routeNum = 0; XmlNodeList routeNodes = doc.DocumentElement.SelectNodes("/mission/route"); foreach (XmlNode routeNode in routeNodes) { routeList.Add(new Route(routeNode.Attributes["name"].Value, routeNode.Attributes["UID"].Value, routeNode.Attributes["FALSE"].Value)); foreach (XmlNode pointNode in routeNode.ChildNodes) { routeList[routeNum].AddPoint(new Point(routeNode.Attributes["name"].Value, routeNode.Attributes["UID"].Value, Convert.ToDouble(routeNode.Attributes["longitude"].Value), Convert.ToDouble(routeNode.Attributes["latitude"].Value), Convert.ToDouble(routeNode.Attributes["altitude"].Value), routeNode.Attributes["velocity"].Value, Convert.ToInt32(routeNode.Attributes["cust_vel"].Value), routeNode.Attributes["pass"].Value, routeNode.Attributes["pass_alt"].Value)); } routeNum ++; }
<mission name="box_small" UID="0x1" > <route name="Route Base" UID="0x342c09eb" cyclic="FALSE" > <waypoint name="StPnt 1" UID="0x1d27c981" longitude="-122.3573137" latitude="37.61349471" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> <waypoint name="StPnt 2" UID="0x5c384c03" longitude="-122.3581334" latitude="37.61335762" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> <waypoint name="StPnt 3" UID="0x4a42a93e" longitude="-122.3581696" latitude="37.61355105" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> <waypoint name="StPnt 4" UID="0x1ea4c1c5" longitude="-122.357339" latitude="37.61369515" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> </route> <route name="Route rotate" UID="0x342c10eb" cyclic="FALSE" > <waypoint name="StPnt 1" UID="0x1d27c981" longitude="-122.35749206" latitude="37.613886193" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> <waypoint name="StPnt 2" UID="0x5c384c03" longitude="-122.35813340" latitude="37.61335762" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> <waypoint name="StPnt 3" UID="0x4a42a93e" longitude="-122.35826146" latitude="37.61350703" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> <waypoint name="StPnt 4" UID="0x1ea4c1c5" longitude="-122.35761419" latitude="37.61404712" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> </route> <route name="Route transfer" UID="0x342c09eb" cyclic="FALSE" > <waypoint name="StPnt 1" UID="0x1d27c981" longitude="-122,3573499" latitude="37,61368814" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> <waypoint name="StPnt 2" UID="0x5c384c03" longitude="-122,3581696" latitude="37,61355105" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> <waypoint name="StPnt 3" UID="0x4a42a93e" longitude="-122,3582058" latitude="37,61374448" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> <waypoint name="StPnt 4" UID="0x1ea4c1c5" longitude="-122,3573752" latitude="37,61388858" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> </route> <route name="Route reverse" UID="0x342c09eb" cyclic="FALSE" > <waypoint name="StPnt 1" UID="0x1d27c981" longitude="-122.3573137" latitude="37.61349471" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> <waypoint name="StPnt 2" UID="0x5c384c03" longitude="-122.3581334" latitude="37.61335762" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> <waypoint name="StPnt 3" UID="0x4a42a93e" longitude="-122.3581696" latitude="37.61355105" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> <waypoint name="StPnt 4" UID="0x1ea4c1c5" longitude="-122.357339" latitude="37.61369515" altitude="50" velocity="cruise" pass="D" pass_alt="D" /> </route> </mission>
Решение задачи: «Парсинг XML: В экземпляре объекта не задана ссылка на объект»
textual
Листинг программы
routeList[routeNum].AddPoint(new Point( ... , Convert.ToInt32(pointNode.Attributes["cust_vel"]), ... ));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д