Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
15 / 0 / 2
Регистрация: 26.08.2016
Сообщений: 62
.NET 4.x

Итерация по xml с огромным количеством родительских и дочерних элементов

08.07.2018, 16:41. Показов 1608. Ответов 4

Студворк — интернет-сервис помощи студентам
Добрый вечер, ув.

XML
1
2
3
4
5
6
7
8
9
10
  <ZAP>
    <N_ZAP>1847897</N_ZAP>
    <PR_NOV>0</PR_NOV>
    <Z_SL>
      <VIDPOM>12</VIDPOM>
      <SL>
        <PROFIL>160</PROFIL>
      </SL>
    </Z_SL>
  </ZAP>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
foreach (XmlNode childnode_1 in DocumXml.DocumentElement.ChildNodes)
{
    foreach (XmlNode childnode_2 in childnode_1.ChildNodes)
    {
        foreach (XmlNode childnode_3 in childnode_2.ChildNodes)
        {
            foreach (XmlNode childnode_4 in childnode_3.ChildNodes)
            {
                if (childnode_4.Name == "PROFIL")
                {
                    if (childnode_4.InnerText == "160")
                    {
                        childnode_3["VIDPOM"].InnerText = "15";
                    }
                }
            }
        }
    }
}
Итератор доходит до тэга PROFIL = 160, как вернуться до VIDPOM и изменить значение либо там же в 4м итераторе, ибо выходит исключение: "Ссылка на объект не указывает на экземпляр объекта."
Заранее очень благодарен.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.07.2018, 16:41
Ответы с готовыми решениями:

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

Добавление родительских и дочерних узлов treeview
Всем привет! нашел статью где описано добавление данных в treeview но оно мне не очень подходит TreeNode tovarNode = new...

SqlDataAdapter тормозит c огромным количеством записей
Есть таблица с 500 тысячами записей, при выполнении select SQLDataAdapter пытается все засунуть в память, и зависает. Предполагается, что...

4
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.07.2018, 17:09
Лучший ответ Сообщение было отмечено BadPawn как решение

Решение

Цитата Сообщение от BadPawn Посмотреть сообщение
как вернуться до VIDPOM и изменить значение
Вместо горы вложенных циклов просто используйте XPath:
C#
1
2
var vidpom = DocumXml.SelectSingleNode("//ZAP/Z_SL/VIDPOM[../SL/PROFIL='160']");
vidpom.InnerText = "15";
Если надо обработать все элементы, то вместо SelectSingleNode вызывайте SelectNodes и в цикле изменяйте значения.
2
15 / 0 / 2
Регистрация: 26.08.2016
Сообщений: 62
09.07.2018, 05:09  [ТС]
Спасибо огромное!!

Добавлено через 3 часа 35 минут
Подскажите пожалуйста еще 1 момент

C#
1
var vidpom = DocumXml.SelectSingleNode("//ZAP/Z_SL/VIDPOM[../SL/PROFIL='160' и DET='1']");
пробовал указатель and, но результат пустой, просто пропускает итерацию.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.07.2018, 09:39
Цитата Сообщение от BadPawn Посмотреть сообщение
пробовал указатель and, но результат пустой, просто пропускает итерацию.
В приведенном примере отсутствует элемент с именем DET, потому мне сложно написать рабочий вариант, но суть остается та же: в квадратных скобках указывайте путь к нужному элементу относительно текущего элемента перед скобками — в данном случае ZAP/Z_SL/VIDPOM.
Если DET — это атрибут на элементе VIDPOM, то используйте модификатор @: //ZAP/Z_SL/VIDPOM[../SL/PROFIL='160' and @DET='1']
1
15 / 0 / 2
Регистрация: 26.08.2016
Сообщений: 62
09.07.2018, 18:31  [ТС]
C#
1
2
3
4
                            foreach (XmlNode vidpom in DocumXml.SelectNodes("//ZAP/Z_SL/VIDPOM[../SL/PROFIL='160' and ../SL/IDDOKT='***-***-***-**']"))
                            {
 
                            }
kolorotur, спасибо тебе огромное!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.07.2018, 18:31
Помогаю со студенческими работами здесь

Оптимизация базы данных с огромным количеством строк
Добрый вечер. Мне интересно ваше мнение, как вы бы решили данную задачу. Задача абстрактная, но послужит отличным примером для всех, кто...

Как правильно обойти TreeView и вывести текст родительских и дочерних узлов
Как правильно обойти TreeView в WPF и вывести текст родительских и дочерних узлов? Причем к каждому узлу добавлено ещё два дочерних узла...

Подсчёт дочерних элементов в XML файле
Здравствуйте, у меня имеется XML файл в котором мне нужно посчитать колличество дочерних элементов(item) у родительского элемента...

LINQ 2 XML Получение атрибутов дочерних элементов
имеется XML файл вида &lt;Root&gt; &lt;Elements Name=&quot;NAME&quot;&gt; &lt;Element Atr1=&quot;atr1&quot; Atr2=&quot;atr2&quot; /&gt; &lt;Element...

Как считать текст дочерних элементов из XML по позиции
Есть XML файл следующего содержания: &lt;xml&gt; &lt;bukva&gt; &lt;desc&gt;A&lt;/desc&gt; &lt;country&gt;Африка&lt;country&gt; &lt;/bukva&gt; &lt;bukva&gt; ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru