Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64

Как в уже созданный атрибут дополнить новыми данными?

20.12.2023, 18:31. Показов 5855. Ответов 56
Метки xml (Все метки)

Студворк — интернет-сервис помощи студентам
вот текст программы в которой в загруженный файл, сохраняю новые значения из (боксов)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
XmlDocument^ xmlDocument = gcnew XmlDocument();
                xmlDocument->Load("rep.xml");
                XmlElement^ xRoot = xmlDocument->DocumentElement;
 
                XmlElement^ otdElem = xmlDocument->CreateElement("otdelenie");        // отделение
                    XmlAttribute^ otdAttr = xmlDocument->CreateAttribute("otd");
                        XmlElement^ surElem = xmlDocument->CreateElement("surname");    // фамилия,имя и отчество
                            
                            String^ otd = comboBox1->Text;
                            String^ surn = textBox1->Text + " " + textBox2->Text + " " +textBox3->Text;
                        XmlText^ otdText = xmlDocument->CreateTextNode(otd);
                        XmlText^surnText = xmlDocument->CreateTextNode(surn);
                    otdAttr->AppendChild(otdText);
                    surElem->AppendChild(surnText);
                otdElem->Attributes->Append(otdAttr);
                otdElem->AppendChild(surElem);
                xRoot->AppendChild(otdElem);
                xmlDocument->Save("rep.xml");
Вопрос в том как мне сделать ( если я знаю что отделение одно и тоже, что бы в отделение и записывала, а не новый елемент.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.12.2023, 18:31
Ответы с готовыми решениями:

Дополнить новыми строками уже существующий текстовый файл
Дополнить новыми строками уже существующий текстовый файл. Для выбора имени файла использовать компонент OpenDialog. Окно...

Можно ли уже созданный DGV с колонками, заполнить данными
А подскажите, можно ли уже созданный грид с колонками, заполнить данными, т.е. я программно создаю датасет адптер и т.д., на форме есть...

Переменная не перезаписывается новыми данными, а дополняется новыми значениями
Всем привет, занимаюсь понемногу питоном на яндексе. Собственно вопрос, есть такой код. Почему переменная bunny_counter не перезаписывается...

56
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
11.01.2024, 18:38  [ТС]
Студворк — интернет-сервис помощи студентам
а форму на Avolonia возможно достать ?
0
 Аватар для Andrey-MSK
3349 / 2235 / 388
Регистрация: 14.08.2018
Сообщений: 7,553
Записей в блоге: 4
11.01.2024, 20:49
Цитата Сообщение от Bond-007 Посмотреть сообщение
а форму на Avolonia возможно достать ?
https://avaloniaui.net/GettingStarted - Удачи в изучении.

Добавлено через 43 секунды
Bond-007, https://docs.avaloniaui.net/docs/welcome
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
12.01.2024, 10:13  [ТС]
понял, спасибо, извиняюсь, что такой поток вопросов был
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
01.02.2024, 17:33  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
String^ otd = comboBox1->Text;
XmlElement^ otdElem = dynamic_cast<XmlElement^>(xmlDocument->DocumentElement->SelectSingleNode("//otdelenie[@otd='" + otd + "']"));
if (otdElem == nullptr) {
    otdElem = xmlDocument->CreateElement("otdelenie");        // отделение
    otdElem->SetAttribute("otd", otd);
    xRoot->AppendChild(otdElem);
}
 
XmlElement^ surElem = xmlDocument->CreateElement("surname");    // фамилия,имя и отчество
surElem->InnerText = textBox1->Text + " " + textBox2->Text + " " +textBox3->Text;
otdElem->AppendChild(surElem);
 
xmlDocument->Save("rep.xml");
как можно подобное реализовать на C# ?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
01.02.2024, 17:40
Цитата Сообщение от Bond-007 Посмотреть сообщение
как можно подобное реализовать на C# ?
Точно так же. Убираем ^, меняем -> на ., dynamic_cast на явное приведение типа, nullptr на null. И дело в шляпе.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
01.02.2024, 17:52  [ТС]
C#
1
2
3
4
5
6
XmlDocument xml = new XmlDocument();
xml.Load(@"C:\Users\User\Desktop\BOND\sample01.xml");
XmlElement element = xml.DocumentElement;
Name = TTT.Text;
if()
XmlElement otdElem = (double) XmlElement(xml.DocumentElement.SelectSingleNode("//otdelenie[@otd='" + otd + "']"))
Вот так сейчас выглядит программа, не понимаю как или в какой тип данных нужно явное приведение и после XmlElement нужны ли скобки.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
01.02.2024, 23:19
Цитата Сообщение от Bond-007 Посмотреть сообщение
не понимаю как
Code
1
(ИмяТипа)выражение
Цитата Сообщение от Bond-007 Посмотреть сообщение
в какой тип данных нужно явное приведение
XmlElement

Цитата Сообщение от Bond-007 Посмотреть сообщение
после XmlElement нужны ли скобки.
Одна скобка лишняя.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
02.02.2024, 15:38  [ТС]
Вот итоговый код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 {
     XmlDocument xml = new XmlDocument();
     xml.Load(@"C:\Users\User\source\repos\AvaloniaApplication8\AvaloniaApplication8\rep.xml");
     XmlElement element = xml.DocumentElement;
     Vzvod = TTT.Text;
     XmlElement otdElem = (XmlElement) xml.DocumentElement.SelectSingleNode("//otdelenie[@otd='" + Vzvod + "']") ;
     if (otdElem != null)
     {
         otdElem = xml.CreateElement("otdelenie");
         otdElem.SetAttribute("Vzvod", Vzvod);
         element.AppendChild(otdElem);
     }
         XmlElement surElem = xml.CreateElement("surname");
         surElem.InnerText = rrr.Text;
         [B]otdElem.AppendChild(surElem);[/B]
         xml.Save(@"C:\Users\User\source\repos\AvaloniaApplication8\AvaloniaApplication8\rep.xml");
     
  
 }
при активации выдает ошику на выделенном элементе
Вот ошибка
"System.NullReferenceException: "Object reference not set to an instance of an object."

otdElem было null."
ну и почему-то не получилось вставить обьект из папки файла и пришлось писать весь путь к файлу
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
02.02.2024, 18:22
Bond-007, в строке №7 неверное условие.
Кликните здесь для просмотра всего текста
вместо != должно быть ==
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
21.03.2024, 18:56  [ТС]
Цитата Сообщение от Bond-007 Посмотреть сообщение
XmlElement otdElem = (XmlElement) xml.DocumentElement.SelectSingleNode("//otdelenie[@otd='" + Vzvod + "']") ;
Как можно проверить, есть ли такой элемент или нет ? до этого я вписывал зная что он есть, а теперь мне нужно определить, если такой элемент и если его нет то действовать по другому
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
21.03.2024, 19:11
Цитата Сообщение от Bond-007 Посмотреть сообщение
Как можно проверить, есть ли такой элемент или нет ?
C#
1
2
3
4
5
6
7
8
if (otdElem == null)
{
    // Элемента нет
}
else
{
    // Элемент есть
}
Добавлено через 2 минуты
P.S. Если бы вы прочитали документацию на метод SelectSingleNode, то вопрос отпал бы сам собой т.к. там написано что метод возвращает null, если элемент не найден.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
22.03.2024, 18:29  [ТС]
Цитата Сообщение от Bond-007 Посмотреть сообщение
XmlElement^ otdElem = dynamic_cast<XmlElement^>(xmlDocument->DocumentElement->SelectSingleNode("//otdelenie[@otd='" + otd + "']"));
как можно сделать подобное на елемент который внутри этого?

Добавлено через 40 секунд
вот как он выглядит в xml
XML
1
2
3
4
5
6
<otdelenie Vzvod="329">
    <surname>sfe</surname>
    <surname>qwe</surname>
    <surname>tyui</surname>
    <surname>22222</surname>
  </otdelenie>
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
22.03.2024, 21:02
Bond-007, строка которая передается в SelectSingleNode называется XPath. Прочитайте документацию и вопросы отпадут.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
11.04.2024, 18:33  [ТС]
может я не ту документацию нашёл. у меня есть список в xml файле у него в каждый элемент это число вопроса по списку и то есть атрибуты у него идут 1,2,3 и т.д. вот он
XML
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<Dani>
  <Vopros Chislo="1">
    <TextName>вопрос1</TextName>
  </Vopros>
<Vopros Chislo="2">
    <TextName>вопрос2</TextName>
  </Vopros>
 
</Dani>
я могу отобрать нужный мне вопрос по данному запросу (где Item это класс)
C#
1
 XmlElement Vopros = (XmlElement)Item.xml.DocumentElement.SelectSingleNode("//Vopros[@Chislo='" + Item.Ita + "']");
в каждом элементе есть один, единственный атрибут, содержащий вопрос, как взять этот вопрос я не понял, я знаю что есть перебор , но у меня им не получилось и мне кажется это излишняя нагрузка на систему и лишняя часть кода
вот она : (Osnova.text - это текст блок в котором будет текст)
C#
1
2
3
4
5
 foreach( XmlNode xnode in Item.element)
 {
     XmlNode TextName = xnode.Attributes.GetNamedItem("TextName");
     Osnova.Text = TextName.Value;
 }
помогите пожалуйста
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
11.04.2024, 22:23
Цитата Сообщение от Bond-007 Посмотреть сообщение
помогите пожалуйста
1. Старайтесь избегать конструкции //. Она означает поиск на любом уровне и приводит к лишней работе.
2. Сам поиск несложно организовать. Если элементы Vopros и TextName вам нужны по отдельности, то:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
string xml =
    """
    <?xml version="1.0" encoding="UTF-8"?>
    <Dani>
      <Vopros Chislo="1">
        <TextName>вопрос1</TextName>
      </Vopros>
    <Vopros Chislo="2">
        <TextName>вопрос2</TextName>
      </Vopros>
     
    </Dani>    
    """;
XmlDocument xmlDoc = new();
xmlDoc.LoadXml(xml);
 
int chislo = 2;
XmlElement Vopros = (XmlElement)xmlDoc.DocumentElement.SelectSingleNode("Vopros[@Chislo='" + chislo + "']");
if (Vopros != null)
{
    XmlElement TextName = Vopros["TextName"];
    string question = TextName.InnerText;
}

Если нужен только текст вопроса, то
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
string xml =
    """
    <?xml version="1.0" encoding="UTF-8"?>
    <Dani>
      <Vopros Chislo="1">
        <TextName>вопрос1</TextName>
      </Vopros>
    <Vopros Chislo="2">
        <TextName>вопрос2</TextName>
      </Vopros>
     
    </Dani>    
    """;
XmlDocument xmlDoc = new();
xmlDoc.LoadXml(xml);
 
int chislo = 2;
string? question = xmlDoc.DocumentElement.SelectSingleNode("Vopros[@Chislo='" + chislo + "']/TextName")?.InnerText;

В обоих примерах игнорируйте строки с 1 по 16. Они мне нужны чтобы иметь xml нужной структуры.

Цитата Сообщение от Bond-007 Посмотреть сообщение
каждый элемент это число вопроса по списку и то есть атрибуты у него идут 1,2,3
Это плохая идея. Элементы в XML нумеруются автоматически. Ручная нумерация плохя тем чтобы нельзя просто так переставить вопросы местами или вставить новый вопрос в середину - всегда потребуется вручную менять номера вопросов. Лучше сделать так (примеры уже без строк 1..16):
C#
1
2
3
4
5
6
7
int questionNumber = 2;
XmlElement Vopros = (XmlElement)xmlDoc.DocumentElement.SelectSingleNode("Vopros[" + questionNumber + "]");
if (Vopros != null)
{
    XmlElement TextName = Vopros["TextName"];
    string question = TextName.InnerText;
}
C#
1
2
int questionNumber = 2;
string? question = xmlDoc.DocumentElement.SelectSingleNode("Vopros[" + questionNumber + "]/TextName")?.InnerText;
Цитата Сообщение от Bond-007 Посмотреть сообщение
может я не ту документацию нашёл
Что значит "нашел не ту документацию" когда я привел одну конкретную ссылку?

P.S. На будущее - будьте добры задавать вопросы по C# в разделе по C#, а не по C++/CLI.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
12.04.2024, 16:00  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Ручная нумерация плохя тем чтобы нельзя просто так переставить вопросы местами или вставить новый вопрос в середину - всегда потребуется вручную менять номера вопросов
у меня данный xml используется как база из которой только берутся данные, она не добавляется из программы, но думаю если мне нужно будет добавить, уже я смогу это сделать
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Что значит "нашел не ту документацию" когда я привел одну конкретную ссылку?
не заметил, моя ошибка
Цитата Сообщение от OwenGlendower Посмотреть сообщение
P.S. На будущее - будьте добры задавать вопросы по C# в разделе по C#, а не по C++/CLI.
понял, извиняюсь
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
12.04.2024, 16:08
Цитата Сообщение от Bond-007 Посмотреть сообщение
у меня данный xml используется как база из которой только берутся данные, она не добавляется из программы, но думаю если мне нужно будет добавить, уже я смогу это сделать
Конечно сможете, но зачем усложнять себе задачу? Как по мне, явный номер является лишним.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.04.2024, 16:08
Помогаю со студенческими работами здесь

Как заполнить QLineEdit новыми данными?
Решил попробовать создать несколько простых интерфейсов на qt в образовательных целях. Читаю книги, въезжаю в логику. Столкнулся с...

Как перезапустить программу с новыми данными из textBox
Что я делаю: Делаю игру сапер и там можно выбирать размер поля (высота и ширина) и нажать старт. Пока только поля прорисовываются и то...

Как проверить результаты кластеризации самоорганизующейся карты Кохонена с новыми данными
Здравствуйте. Есть экселевский документ где находится выборка 14 значений (первые 7 односятся к первому кластеру), а другие 7 ко второму. ...

Файл: Подскажите, как взять вторую строку и перезаписать новыми данными, стерев предыдущие.
Добрый вечер. У меня есть файл из нескольких строк. Подскажите, как мне взять вторую строку и перезаписать своими новыми данными, стерев...

Как рассчитать разницу между новыми введенными данными в EditText и старыми и вывести результат в Textview?
Ребят нужна помощь, я только начал изучать андроид, собственно в своем приложении мне нужно чтобы новые введённые данные в EditText...


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

Или воспользуйтесь поиском по форуму:
57
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru