Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 49

Исключение "ссылка на объект не указывает на экземпляр объекта" при работе с XML

14.03.2015, 13:27. Показов 4928. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообще есть проблемка, выдаёт ошибку при компиляции:
C#
1
ссылка на объект не указывает на экземпляр объекта
Вот сам код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 if (File.Exists(file_name))
                {
                    XmlDocument txt = new XmlDocument();
                    txt.Load(file_name);
                    XmlNodeList elemList = txt.GetElementsByTagName("name");
                    string attrVal = String.Empty;
                    for (int i = 0; i < elemList.Count; i++)
                    {
                       
                            attrVal = elemList[i].Attributes["href"].InnerText;
                            System.Console.WriteLine(attrVal);
                            SQLiteCommand com = new SQLiteCommand("update big cityset name=@name where path=@path", m_dbConnection);
 
                            com.Parameters.Add(new SQLiteParameter("@path", match.Groups[1].Value + match.Groups[2].Value));
                            com.Parameters.Add(new SQLiteParameter("@name", attrVal));
                            com.ExecuteNonQuery();
                        
 
                    }
                }
 
 
            }
Ругается на строчку:
C#
1
attrVal = elemList[i].Attributes["href"].InnerText;
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2015, 13:27
Ответы с готовыми решениями:

Ссылка на объект не указывает на экземпляр объекта при работе с делегатами
Добрый вечер, уважаемые форумчане. При работе с делегатами столкнулся со следующей проблемой: NullReferenceException не обработано ...

Ссылка на объект не указывает на экземпляр объекта при работе с массивами
Доброго времени суток!Написал программу,но ругается, не понимаю почему:cry: Поясните что нужно сделать,пожалуйста!

Ошибка при разборе XML. Ссылка на объект не указывает на экземпляр объекта
Добрый день! Столкнулась со следующей проблемой: разбираю xml сообщение следующего вида: &lt;settings&gt; - &lt;row&gt; ...

9
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
14.03.2015, 13:37
Лучший ответ Сообщение было отмечено 4ePtb как решение

Решение

C#
1
2
3
4
if (elemList[i].Attributes["href"] != null) {
    attrVal = elemList[i].Attributes["href"].InnerText;
    // ...
}
1
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 49
14.03.2015, 15:51  [ТС]
tezaurismosis, вопросик, а могу ли я обойтись без цикла for, если у меня в теге всего один атрибут, если да, то как?

Вот мой тег из которого я вытаскиваю название:
XML
1
<name href="chaos.txt" />
Добавлено через 49 минут
скажем так, как можно спарсить один несчастный атрибут из xml файла
XML
1
<name href="chaos.txt" />
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
14.03.2015, 16:14
Вот так м.б.
C#
1
attrVal = elemList.First(item => item.Attributes["href"] != null).InnerText;
Если структура файла вам точно заранее известна, то можно, поскрипя душой, поймать его там регуляркой с помощью Match
Code
1
<name href="(.+)"
0
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 49
14.03.2015, 16:41  [ТС]
Я просто хочу избавиться от цикла for, который тормозит работу, мне значение name, надо спарсить с большого количества файлов и я ищу менее затратный метод
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,889
Записей в блоге: 1
14.03.2015, 16:45
4ePtb, можно выбрать нужные узлы с помощью XPath:
C#
1
2
3
XmlDocument txt = new XmlDocument();
txt.Load(file_name);
XmlNodeList elemList = txt.SelectNodes("//name[@href]");
0
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 49
14.03.2015, 19:02  [ТС]
OwenGlendower, а дальше опять через цикл for? или как-то иначе?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,889
Записей в блоге: 1
14.03.2015, 19:07
4ePtb, если узлов name может быть несколько, то конечно нужен цикл. Если в каждом файле он встречается только один раз, то используй SelectSingleNode:
C#
1
2
XmlElement nameElem = (XmlElement)txt.SelectSingleNode("//name[@href]");
string href = nameElem.GetAttribute("href");
0
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 49
14.03.2015, 19:34  [ТС]
OwenGlendower, Выдаёт опять ошибку
C#
1
ссылка на объект не указывает на экземпляр объекта
Вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
 XmlElement nameElem = (XmlElement)xdb.SelectSingleNode("//name[@href]");
                   if (nameElem.GetAttribute("href") != null) { 
                        string href = nameElem.GetAttribute("href");
 
                            System.Console.WriteLine(href);
                           SQLiteCommand command = new SQLiteCommand("update bigTable set name=@name where path=@path", m_dbConnection);
 
                           command.Parameters.Add(new SQLiteParameter("@path", match.Groups[1].Value + match.Groups[2].Value));
                            command.Parameters.Add(new SQLiteParameter("@name", href));
                            command.ExecuteNonQuery();
                        }
Ругается на:
C#
1
 if (nameElem.GetAttribute("href") != null) {
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,889
Записей в блоге: 1
14.03.2015, 19:46
Цитата Сообщение от 4ePtb Посмотреть сообщение
Ругается на: if (nameElem.GetAttribute("href") != null) {
Значит nameElem равен null. Проверка что GetAttribute вернет null не нужна т.к. XPath выражение //name[@href] вернет только узел где есть атрибут href. Поэтому пишем так:
C#
1
2
3
4
5
6
7
8
9
10
11
XmlElement nameElem = (XmlElement)xdb.SelectSingleNode("//name[@href]");
if (nameElem != null) {
    string href = nameElem.GetAttribute("href");
 
    System.Console.WriteLine(href);
    SQLiteCommand command = new SQLiteCommand("update bigTable set name=@name where path=@path", m_dbConnection);
 
    command.Parameters.Add(new SQLiteParameter("@path", match.Groups[1].Value + match.Groups[2].Value));
    command.Parameters.Add(new SQLiteParameter("@name", href));
    command.ExecuteNonQuery();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2015, 19:46
Помогаю со студенческими работами здесь

Исключение. Ссылка на объект не указывает на экземпляр объекта
Доброе время, у меня выбивает исключение и я не могу додуматься как решить его. Може кто подсказать? using System; using...

Ссылка на объект не указывает на экземпляр объекта при работе с DGV и XML
var gridToXml=new ClassVivod; for (int i = 0; i &lt; gridToXml.Count(); i++) { gridToXml.Key...

Ссылка на объект не указывает на экземпляр объекта при работе с графикой
Помогите, а то после целого дня уже не соображаю! В чём проблема? &quot;Ссылка на объект не указывает на экземпляр объекта.&quot;, вылетает на...

Ссылка на объект не указывает на экземпляр объекта при работе с процессами
Здравствуйте, столкнулся с этой проблемой недавно, уже всю голову сломал. Суть: Хочу сделать чтобы процессы сравнивались с процессами из...

Исключение в событии timer_Tick-Ссылка на объект не указывает на экземпляр объекта
Глобальная переменная и метод. double** wht; void created(int Nt, int Nx) { wht = new double *;...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru