Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
3 / 3 / 1
Регистрация: 08.06.2015
Сообщений: 41

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

28.04.2017, 14:51. Показов 2333. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Я хочу разобраться с парсингом XML на примере конфигуратора маршрута. XML с маршрутами подгружается нормально, но при попытке получить значение какого-то атрибута вылетает ошибка "В экземпляре объекта не задана ссылка на объект.", хотя на самом деле такой атрибут есть и даже верно определяется. Правда поле "value" странно имеет значение "null". Скрины и XML прилагаю

Код:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
                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:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<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:  В экземпляре объекта не задана ссылка на объект   Парсинг XML:  В экземпляре объекта не задана ссылка на объект  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2017, 14:51
Ответы с готовыми решениями:

в экземпляре объекта не задана ссылка на объект
Bitmap bmp1 = new Bitmap(pcCOPY.Image); pcCOPY обычный picturebox. выводит исключение в экземпляре объекта не задана ссылка на...

В экземпляре объекта не задана ссылка на объект
Добрый день.Делаю приложение на LightSwitch. В одной из таблиц требуется вычислить сколько дней осталось до окончания лицензии на...

В экземпляре объекта не задана ссылка на объект
Есть несколько форм 1)Пользовательская - работает отлично 2)Админ - вход по паролю 3)Сотрудник - вход по паролю К формам 2 и 3...

4
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
28.04.2017, 15:19
Лучший ответ Сообщение было отмечено GfiFer как решение

Решение

GfiFer, атрибут называется "cyclic" а не "FALSE" (строка 15), во внутреннем цикле нужно использовать переменную pointNode вместо routeNode, а атрибута cust_vel в приведенной xml вобще нет.
1
3 / 3 / 1
Регистрация: 08.06.2015
Сообщений: 41
28.04.2017, 16:00  [ТС]
Точно! Не увидел, спасибо.
А вот cust_vel в некоторых xml есть, а в некоторых нет. Как правильно это обработать?
0
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
28.04.2017, 16:33
GfiFer, проверить есть он или нет можно сравнением с null до выбора Value:
C#
1
2
3
4
5
6
7
8
if (pointNode.Attributes["cust_vel"] != null)
{
    // используем pointNode.Attributes["cust_vel"].Value
}
else
{
    // не используем pointNode.Attributes["cust_vel"].Value
}
другой вопрос, что подавать в конструктор new Point(...) если атрибута нет?, если какое-то заданное значение, то можно так:
C#
1
2
3
4
5
6
7
routeList[routeNum].AddPoint(new Point(
   ... ,
   routeNode.Attributes["cust_vel"] == null ? 
       9999 : // какое-то значение при отсутствии атрибута
       Convert.ToInt32(routeNode.Attributes["cust_vel"].Value),
   ... 
));
если это значение 0, то можно передать аттрибут (не Value) в Convert.ToInt32, он проверит его на null и вернет число 0:
C#
1
2
3
4
5
routeList[routeNum].AddPoint(new Point(
   ... ,
   Convert.ToInt32(pointNode.Attributes["cust_vel"]),
   ... 
));
1
3 / 3 / 1
Регистрация: 08.06.2015
Сообщений: 41
28.04.2017, 17:50  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.04.2017, 17:50
Помогаю со студенческими работами здесь

В экземпляре объекта не задана ссылка на объект.
Извините, может, я просто устал и не вижу элементарных вещей, но никак не могу понять, почему выдаёт ошибку... В общем-то, надо...

В экземпляре объекта не задана ссылка на объект
Ошибка на строчке номер 6: OECClient.Global.OnLoginFailed += new OnLoginFailedEvent(OECClient_OnLoginFailed); Подскажите, пожалуйста, в...

В экземпляре объекта не задана ссылка на объект
Всем привет. Подскажите кто знает в чем ошибка. class ochered//&lt;T0&gt; { private ochered masOhcer; public...

NullReferenceException - В экземпляре объекта не задана ссылка на объект
При выполнении методов класса Hotel (методы AddRoom и CountAverPrice) падает NullReferenceException - В экземпляре объекта не задана ссылка...

C# - NullReferenceException - В экземпляре объекта не задана ссылка на объект
Доброго времени суток! Подскажите пожалуйста в чем может быть проблема? public partial class DateTimePanel : UserControl { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru