Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64

Работа с XML файлом: Добавить новый элемент в элемент находящийся в элементе

17.07.2024, 17:14. Показов 2177. Ответов 30
Метки xml (Все метки)

Студворк — интернет-сервис помощи студентам
Есть база данных на Xml, в ней при регистрации пользователя создается 1 элемент название Взвода и 2 Элемент вложенный в первый данные об учащемся. по итогу прохождения программы во 2 элемент должен добавится(вложиться) 3 элемент (баллы которые получил участник )
как примерно выглядят Элементы в Xml
XML
1
2
3
  <otdelenie Vzvod="432">
    <surname>Петров  Пётр Сергеевич</surname>
  </otdelenie>
как выглядит код для добавления 3 элемента, в строчке с
C#
1
surElem.AppendChild(Rez);
ошибка в surElem ==0
вот она
C#
1
2
3
System.NullReferenceException: "Object reference not set to an instance of an object."
 
surElem было null.
вот сам отрывок кода
C#
1
2
3
4
5
6
7
8
9
10
11
XmlElement otdElem = (XmlElement)data.xml.DocumentElement.SelectSingleNode("//otdelenie[@Vzvod='" + data.Vzvod + "']");
 
XmlElement surElem = (XmlElement)data.xml.DocumentElement.SelectSingleNode("//surname[@Vzvod='" + data.FullName + "']");
 
 
XmlElement Rez = (XmlElement)data.xml.DocumentElement.SelectSingleNode("//Rezultat[@Rezult='" + rez + "']");
 
Rez = data.xml.CreateElement("Rezult");
Rez.InnerText = rez.ToString();
surElem.AppendChild(Rez);
data.xml.Save(data.location + @"rep.xml");
спасибо за помощ
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.07.2024, 17:14
Ответы с готовыми решениями:

Как передвигать указатель чтобы выделить память под новый элемент и добавить новый элемент в массив?
Допустим есть некое условие,нам нужно при каждом его выполнении выделить память под новый элемент и добавить его в массив. Вопрос:Как...

Добавить новый элемент и параметр в существующий XML файл
Добрый всем день! Как добавить в XML новую строку вида &lt;pattern name=&quot;value&quot; /&gt; &lt;?xml version=&quot;1.0&quot;...

Удалить из списка очереди первый элемент, добавить новый элемент на последнее место
1.Создать односвязный список типа стек. Скопировать его в другой список типа очередь. Удалить из списка очереди первый элемент, добавить...

30
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
14.11.2024, 09:49  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от OwenGlendower Посмотреть сообщение
А хранили бы все данные и проблем бы меньше было.
тогда все данные , просто так находились бы в программе на всем пути её работы и лишний бы раз её загружали

Добавлено через 20 минут
Ошибка + $exception {"Object reference not set to an instance of an object."} System.NullReferenceException

Вот само задание Элемента в котором находится нужный мне и само место ошибки
C#
1
2
3
4
                XmlElement Otd = (XmlElement)data.xml.DocumentElement.SelectSingleNode("//otdelenie[@Vzvod='" + Vzvod.Text + "']");
    XmlElement Name = (XmlElement)data.xml.DocumentElement.SelectSingleNode("//otdelenie[@Vzvod='" + data.Vzvod + "']/Name[text()='" + data.FuulName + "']");
 
    Otd.AppendChild(Name);
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18342 / 14268 / 5370
Регистрация: 17.03.2014
Сообщений: 28,933
Записей в блоге: 1
15.11.2024, 12:34
Цитата Сообщение от Bond-007 Посмотреть сообщение
Ошибка + $exception {"Object reference not set to an instance of an object."} System.NullReferenceException
Значит нет такого элемента. Проверяйте свой XML, проверяйте XPath выражение.

Цитата Сообщение от Bond-007 Посмотреть сообщение
тогда все данные , просто так находились бы в программе на всем пути её работы и лишний бы раз её загружали
Необязательно. Можно прочитать файл, взять один нужный элемент, а остальное отбросить. Возможно так вам будет проще т.к. вы уже долго боретесь с XML и все время наступаете на одни и те же грабли.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
15.11.2024, 12:43  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Необязательно. Можно прочитать файл, взять один нужный элемент, а остальное отбросить. Возможно так вам будет проще т.к. вы уже долго боретесь с XML и все время наступаете на одни и те же грабли.
Давайте я кратко расскажу что происходит в программе по моему мнению.
1) человек регистрируется создается сейв в xml-файле с его элементом (1) его отделение и его атрибутом, после создается его подэлемент (2) с Фамилией Именем и Отчеством ( при наличии ).
(либо же) в уже имеющемся взводе создается новый человек.
(или) ничего не создается ( НАД этим щас работаю)
-> Дальше
открывается новое окно, он проходит тест, после чего в его уже созданные данные сохраняются данные с его результатом прохождения теста (3) Элемент под его (Именем и т.д.)

Добавлено через 2 минуты
в самой программе есть динамические переменные с классом data в них сохранаются 1)XmlDocument xml 2) Взвод 3) ФИО
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18342 / 14268 / 5370
Регистрация: 17.03.2014
Сообщений: 28,933
Записей в блоге: 1
15.11.2024, 13:55
Bond-007, описанный функционал можно без проблем реализовать как путем прямой работы с XML так и с помощью сериализации/десереализации. Видя как вы боретесь с XML я считаю что вам стоит попробовать второй вариант.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
15.11.2024, 14:00  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
сериализации/десереализации.
Это будут лишние постоянные данные в программе ) я пытаюсь разобраться в работе ( хочу сказать, что недавно я потерял эту программу и начал её восстанавливать. Благодаря этому я начал реально понимать как, что работает и что к чему относится, только недавно понял полноценно что такое атрибут что из себя представляет Элемент , спасибо за предложение , у меня всё заработало )
возможно десириализация будет удобна для вывода данных, но с ней и разобраться куда сложнее
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18342 / 14268 / 5370
Регистрация: 17.03.2014
Сообщений: 28,933
Записей в блоге: 1
15.11.2024, 14:02
Bond-007, вам виднее.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
16.11.2024, 09:14  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Видя как вы боретесь с XML я считаю что вам стоит попробовать второй вариант.
Если вы так считаете, я вам доверяю, давайте попробуем так, но я говорю я ток недавно начал разбираться в xml учитывая что я работаю с ним полгода, что будет с сириализацией.
я смогу добавить в уже имеющийся файл, файлы записанные в программе ? то есть , человек зарегистрировался и добавить его сразу, не выводя весь файл из xml
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16153 / 11274 / 2890
Регистрация: 21.04.2018
Сообщений: 33,152
Записей в блоге: 2
17.11.2024, 12:10
Цитата Сообщение от Bond-007 Посмотреть сообщение
при сериализации, нельзя работать с конкретным элементом,
Можно.
И намного удобнее.

Цитата Сообщение от Bond-007 Посмотреть сообщение
нужно будет каждый раз открывать файл и по всему ему проходить,
Открывать файл нужно не чаще чем вы сейчас загружаете дерево XML.
Для "прохода" существует LINQ, но скорее всего после сериализации проходов и не потребуется.

Добавлено через 3 минуты
У вас проблема, насколько вижу, даже не в самой работе с XML.
Вы фактически игнорируете ООП. Вместо работы с объектами, работаете с отдельными элементами исходных данных методами процедурного программирования, как на Basic полвека назад.
Шарп - это ЯП для ООП. И игнорировать ООП при разработке на Шарпе.... мягко говоря, нецелесообразно.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
18.11.2024, 11:00  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы фактически игнорируете ООП. Вместо работы с объектами, работаете с отдельными элементами исходных данных методами процедурного программирования, как на Basic полвека назад.
Вы имеет ввиду что я до конца раскидываю каждый файл, вместо того, что бы просто сделать класс и закинуть его ? или как это в сериализации называется
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3453 / 2774 / 575
Регистрация: 04.09.2018
Сообщений: 8,725
Записей в блоге: 3
18.11.2024, 11:35
Цитата Сообщение от Bond-007 Посмотреть сообщение
не выводя весь файл из xml
куда "не выводя"?
Цитата Сообщение от Bond-007 Посмотреть сообщение
до конца раскидываю каждый файл
что "раскидываешь"?

Bond-007, когда ты работаешь с конкретным XmlElement-ом, на этот момент ты уже считал весь файл в память. Он там висит целиком, хоть "выводи", хоть "не выводи".
Так же и запишется он весь целиком обратно в файл, при сохранении.

Цитата Сообщение от Bond-007 Посмотреть сообщение
но с ней и разобраться куда сложнее
с ней разбираться куда легче, равно как и манипулировать отдельными данными. Это сейчас ты не понимая ничего делаешь уродливую работу через... одно место.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16153 / 11274 / 2890
Регистрация: 21.04.2018
Сообщений: 33,152
Записей в блоге: 2
18.11.2024, 13:28
Цитата Сообщение от Bond-007 Посмотреть сообщение
Вы имеет ввиду что я до конца раскидываю каждый файл, вместо того, что бы просто сделать класс и закинуть его ?
Даже больше.
У вас есть объекты (экземпляры класса): человек, учащийся, преподаватель, урок, занятие и т.д.
Вы изменяете состояние этих объектов.
Если нужно, то сохраняете состояние и восстанавливаете его.
То есть вы должны работать с объектами.
Соответственно, если вы так будете работать, то сохранять/восстанавливать состояния объектов с помощью сериализации будет намного проще и органичнее.

Под работу с Хранилищем вам нужно создать Репозиторий.
И это уже его забота, как сохранять/восстанавливать сущности.
При необходимости вы должны иметь возможность изменить Хранилище (например на SQLite) изменив для этого только подключаемый к Приложению Репозиторий.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2024, 13:28

Функция: добавить новый элемент в начало списка, если элемент с таким значением не существует
Задание у меня такое, никак не могу с ним справится.. помогите, пожалуйста, кто может Напишите функцию, которая добавляет новый...

Функция: добавить новый элемент в начало списка, если элемент с таким значением не существует
Задание у меня такое, никак не могу с ним справится.. помогите, пожалуйста, кто может :( Напишите функцию, которая добавляет новый...

Удалить из списка заданный элемент, добавить в конец новый элемент, напечатать список в обратном порядке
Прошу помощи! Пусть дан циклический двунаправленный список, с информативным полем - целое число: а) удалить из списка первый...

Удалить элемент из списка и добавить новый элемент
Здравствуйте уважаемые!! Помогите пожалуйста! Создать список из 10 идентификаторов с длинной каждого 5 символов и удалить к-ый элемент...

Добавить в начало списка новый элемент со значением D1, а конец - новый элемент со значением D2
Помогите пожалуйста!... Даны числа D1 и D2 и указатель Р0 на один из элементов непустого двосвязного списка. Добавить в начало списка новый...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru