Парсинг XML: В экземпляре объекта не задана ссылка на объект - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Я хочу разобраться с парсингом XML на примере конфигуратора маршрута. XML с маршрутами подгружается нормально, но при попытке получить значение какого-то атрибута вылетает ошибка "В экземпляре объекта не задана ссылка на объект.", хотя на самом деле такой атрибут есть и даже верно определяется. Правда поле "value" странно имеет значение "null". Скрины и 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 ++;
                }
XML:
<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"]),
   ... 
));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы