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

Как сделать выборку из внутренних элементов

18.07.2024, 10:45. Показов 1547. Ответов 31
Метки xml (Все метки)

Студворк — интернет-сервис помощи студентам
есть элемент - название взвода, ранее подсказали как сделать что бы все его данные показывало в лист-боксе
как сделать что бы его внутренние элементы так же показывались ? то есть в этом элементе, есть элемент 2 и внутри него элемент 3, я попробовал по примеру прошлого сделать, но я не могу понять как обозначить этот внутренний элемент вот в этой строчки 1 рабочего примера
C#
1
 data.element = data.xml.DocumentElement;
Пример 1 (рабочий на 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
    data.xml = new XmlDocument();
    data.xml.Load(data.location + @"rep.xml");
    data.element = data.xml.DocumentElement;
    int count = data.xml.DocumentElement.ChildNodes.Count;
    string[] apap = new string[count];
    apap[0] = "";
 
 
    foreach (XmlNode xnode in data.element)
        if (xnode.Attributes.Count > 0)
        {
 
            XmlNode attr = xnode.Attributes.GetNamedItem("Vzvod");
 
            if (attr != null && i < count)
            {
                Array.Resize(ref apap, apap.Length + 1);
                apap[i] = attr.Value;
 
                VzvodW.ItemsSource = apap;
                i++;
            }
        }
пример 2 (на 2 элемент, не рабочий )
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
        int into = surElem.ChildNodes.Count;
        String[] erer = new string[into];
        erer[0] = "";
 
        foreach (XmlNode xName in surElem.ChildNodes)
        {
            XmlNode Name = xName.Attributes.GetNamedItem("surname");
 
            if(Name != null && j < into)
            {
                Array.Resize(ref erer,erer.Length + 1);
                erer[j] = Name.Value;
                FullName.ItemsSource = erer;
                j++;
            }
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.07.2024, 10:45
Ответы с готовыми решениями:

Как сделать выборку элементов из массива?
Задан массив A, состоящий из M элементов. Необходимо сгенерировать новый массив B, некой размерности N+1, элементы которого - результат...

Как сделать выборку из списка элементов, содержащих .ru?
Есть список вида www.site.ru', 'www.site.es'], из него нужно получить только элементы где есть &quot;.ru&quot; . Как это сделать? ...

Сделать выборку элементов
Можно ли выбрать с .div_2 по .div_16? На каждый вопрос создавайте по одной теме! (Правила п.4.4)

31
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
19.07.2024, 09:40  [ТС]
видоизменил код
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
30
31
32
33
34
35
36
37
38
 data.location = Assembly.GetExecutingAssembly().Location.ToString();
 data.location = data.location.Remove(data.location.Length - 27, 27);
 data.location += @"Dan\";
 data.xml = new XmlDocument();
 data.xml.Load(data.location + @"rep.xml");
 data.element = data.xml.DocumentElement;
 int count = data.xml.DocumentElement.ChildNodes.Count;
 string[] apap = new string[count];
 apap[0] = "";
 
 
 foreach (XmlNode xnode in data.element)
     if (xnode.Attributes.Count > 0)
     {
 
         XmlNode attr = xnode.Attributes.GetNamedItem("Vzvod");
 
         if (attr != null && i < count)
         {
             Array.Resize(ref apap, apap.Length + 1);
             apap[i] = attr.Value;
 
             VzvodW.ItemsSource = apap;
             i++;
         }
         int into = xnode.ChildNodes.Count;
         String[] erer = new string[into];
         erer[0] = "";
         if (into > j)
             foreach (XmlNode Fname in xnode.ChildNodes)
         {
                 if (Fname.Name == "surname")
                     Array.Resize(ref erer, erer.Length + 1);
                 erer[j] = Fname.Value;
 
                 FullName.ItemsSource = erer;
                 j++;
         }
в 29 строке вылетает ошибка
C#
1
System.IndexOutOfRangeException: "Index was outside the bounds of the array."
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,844
Записей в блоге: 1
19.07.2024, 10:12
Цитата Сообщение от Bond-007 Посмотреть сообщение
в 29 строке вылетает ошибка System.IndexOutOfRangeException: "Index was outside the bounds of the array."
Скорее в 28 из-за того что into = 0.

Цитата Сообщение от Bond-007 Посмотреть сообщение
Array.Resize(ref apap, apap.Length + 1);
Почему вы не пользуетесь List<striing> который возьмет эти детали на себя?

Цитата Сообщение от Bond-007 Посмотреть сообщение
data.location.Remove(data.location.Lengt h - 27, 27)
Это говнокод. Не надо так делать. Первые три строки можно заменить одной
C#
1
data.location = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Dan");
Или такой, если у вас Windows Forms
C#
1
data.location = Path.Combine(Application.StartupPath, "Dan");
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,094
Записей в блоге: 14
19.07.2024, 10:19
Bond-007, почитайте уже про XElement, XDocument, Linq2Xml.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
19.07.2024, 10:37  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Это говнокод. Не надо так делать. Первые три строки можно заменить одной
Цитата Сообщение от OwenGlendower Посмотреть сообщение
data.location = Path.Combine(Path.GetDirectoryName(Assem bly.GetExecutingAssembly().Location), "Dan");
таким образом он лезет не туда, вот куда входит ваш код System.IO.DirectoryNotFoundException: "Could not find a part of the path 'C:\Users\User\Desktop\BOND\BoTest\BoTes t\BoTest.Desktop\bin\Debug\net7.0\BoTest .dll\Dan\rep.xml'."
а вот где находится база xml C:\Users\User\Desktop\BOND\BoTest\BoTest \BoTest.Desktop\Dan\rep.xml
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,094
Записей в блоге: 14
19.07.2024, 10:40
Bond-007, файлы, с которыми работает программа, надо копировать вместе с ней. К исходникам лезть нельзя.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
19.07.2024, 11:02  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Bond-007, файлы, с которыми работает программа, надо копировать вместе с ней. К исходникам лезть нельзя.
Мне все xml файлы и все картинки напрямую в программу закидывать ? BoTest.Desktop - как папка не открывается, я так понимаю только через прогу могу взаимодействовать

Добавлено через 2 минуты
Так, не понял, я щас посмотрел, оно и так присутствует в BoTest.Desktop
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,844
Записей в блоге: 1
19.07.2024, 11:11
Цитата Сообщение от Bond-007 Посмотреть сообщение
таким образом он лезет не туда, вот куда входит ваш код System.IO.DirectoryNotFoundException: "Could not find a part of the path 'C:\Users\User\Desktop\BOND\BoTest\BoTes t\BoTest.Desktop\bin\Debug\net7.0\BoTest .dll\Dan\rep.xml'."
а вот где находится база xml C:\Users\User\Desktop\BOND\BoTest\BoTest \BoTest.Desktop\Dan\rep.xml
То есть rep.xml находится не рядом с приложением как я думал, а в папке проекта. Вам следует задуматься о следующих вещах:

1) Как тот кто читает ваш код догадается что за location.Remove(data.location.Length - 27, 27) скрывается подъем на несколько уровней выше?

2) Что произойдет с приложением если вы переключитесь на конфигурацию Release?

3) И главное, как при такой структуре папок вы собираетесь отдавать готовую программу заказчику?
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,094
Записей в блоге: 14
19.07.2024, 11:19
Мне все xml файлы и все картинки напрямую в программу закидывать ?
Если файл лежит в исходниках, ему ставится опция - копировать в выходной каталог.
Программа со своими исходниками не работает.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
19.07.2024, 11:22  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Как тот кто читает ваш код догадается что за location.Remove(data.location.Length - 27, 27) скрывается подъем на несколько уровней выше?
это единственный рабочий способ который я нашёл на данный момент, я не против его изменить более универсальным, но пока не до конца понимаю как это сделать, он выдает ошибку хотя путь, как оказывается, подходит
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Что произойдет с приложением если вы переключитесь на конфигурацию Release?
я ещё не знаю что за release
Цитата Сообщение от OwenGlendower Посмотреть сообщение
И главное, как при такой структуре папок вы собираетесь отдавать готовую программу заказчику?
вы имеет ввиду что программа будет работать только на моём пк ? если да то эта огромная проблема и ответ уже описал в 1 пункте

Добавлено через 59 секунд
Цитата Сообщение от Rius Посмотреть сообщение
ему ставится опция - копировать в выходной каталог.
а почему выдает ошибку в таком случае, вроде должно работать ?
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,094
Записей в блоге: 14
19.07.2024, 11:26
Почему? Код неправильный, вычисления неправильны. Всё, что не работает, есть следствие ваших действий.
Отладчиком можете посмотреть.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,844
Записей в блоге: 1
19.07.2024, 11:53
Цитата Сообщение от Bond-007 Посмотреть сообщение
это единственный рабочий способ который я нашёл на данный момент, я не против его изменить более универсальным, но пока не до конца понимаю как это сделать
Rius, уже сказал что делать - "Если файл лежит в исходниках, ему ставится опция - копировать в выходной каталог."

Цитата Сообщение от Bond-007 Посмотреть сообщение
я ещё не знаю что за release
Читайте первый параграф по ссылке

Цитата Сообщение от Bond-007 Посмотреть сообщение
вы имеет ввиду что программа будет работать только на моём пк ?
Нет, но её будет неудобно распространять из-за плохой структуры папок. Которая должна быть примерно такой:
Code
1
2
3
4
5
6
7
\ корень
  \Dan
    rep.xml
  \bin
    \Debug
      \net7.0
        файлы приложения
По хорошему структура должна быть такой
Code
1
2
3
4
\ корень
  \Dan
    rep.xml
  файлы приложения
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
19.07.2024, 11:57  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Почему? Код неправильный, вычисления неправильны. Всё, что не работает, есть следствие ваших действий.
Отладчиком можете посмотреть.
пишет что не может найти файл, но если я каким-то магическим способом закину все файлы в dll я потеряю возможность их редактирования, я думаю мой способ до этого достаточно работал. щас бы понять как с этими листами работать
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,094
Записей в блоге: 14
19.07.2024, 12:14
Bond-007, отладчик это такая штука, которая позволяет ходить по строкам программы и смотреть, что там происходит и почему.
А вы про сообщение об ошибке.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
19.07.2024, 13:20  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
отладчик это такая штука, которая позволяет ходить по странам программы и смотреть, что там происходит и почему.
А вы про сообщение об ошибке.
я понял, идет программа и на этой строчке ошибка, потому что в dll файл я не закидывал данные, а она берет из него

Добавлено через 33 минуты
как через
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Почему вы не пользуетесь List<striing> который возьмет эти детали на себя?
можно переделать прогу ?

Добавлено через 2 минуты
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Что произойдет с приложением если вы переключитесь на конфигурацию Release?
На сколько помню оно изначально на нём не запускалась ,а щас есть вот такие две ошибки 1)
C#
1
2
Серьезность  Код  Описание    Проект    Файл    Строка    Состояние подавления
Ошибка    CS0006  Не удалось найти файл метаданных "C:\Users\User\Desktop\BOND\BoTest\BoTest\BoTest\obj\Release\net7.0\ref\BoTest.dll".   BoTest.Desktop  C:\Users\User\Desktop\BOND\BoTest\BoTest\BoTest.Desktop\CSC 1   Активные
и 2)
C#
1
2
Серьезность  Код  Описание    Проект    Файл    Строка    Состояние подавления
Ошибка        Object reference not set to an instance of an object.   BoTest  C:\Users\User\Desktop\BOND\BoTest\BoTest\BoTest\Views\TestVop.axaml
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,844
Записей в блоге: 1
19.07.2024, 13:35
Цитата Сообщение от Bond-007 Посмотреть сообщение
как через [...] List<striing> [...] можно переделать прогу ?
Элементарно, но расскажите пожалуйста как можно программировать на .NET и не знать про List<T>?

Пример с массивом (как у вас):
C#
1
2
3
4
5
6
7
string[] array = new string[0];
 
Array.Resize(ref array, array.Length+1);
array[0] = "Aaa";
 
Array.Resize(ref array, array.Length + 1);
array[1] = "Bbb";
Пример с List<T>:
C#
1
2
3
List<string> list = new List<string>();
list.Add("Aaa");
list.Add("Bbb");
Что еще умеет List<T> смотрите в документации.

Цитата Сообщение от Bond-007 Посмотреть сообщение
На сколько помню оно изначально на нём не запускалась ,а щас есть вот такие две ошибки 1)
Именно это я и имел в виду (ошибки в смысле). Подумайте почему они возникают и исправьте.
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
23.07.2024, 10:40  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Именно это я и имел в виду (ошибки в смысле). Подумайте почему они возникают и исправьте.
как - то исправил ошибки, но теперь при открытии этого окна выдает ошибку
C#
1
System.IO.DirectoryNotFoundException: "Could not find a part of the path 'C:\Users\User\Desktop\BOND\BoTest\BoTest\BoTest.Desktop\bin\Debug\net7.0\BoTest.dll\Dan\rep.xml'."
только саму программу я уже передал и вот как она выглядит
C#
1
2
InitializeComponent();
 data.location = Path.Combine(Path.GetFullPath(Assembly.GetExecutingAssembly().Location), "rep.xml");
сама ошибка раньше происходила в этом окне, а теперь в окне которое его открывает
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,844
Записей в блоге: 1
23.07.2024, 12:38
Цитата Сообщение от Bond-007 Посмотреть сообщение
data.location = Path.Combine(Path.GetFullPath(Assembly.G etExecutingAssembly().Location), "rep.xml");
Этот код точно неверный. Assembly.GetExecutingAssembly().Location возвращает полный путь к сборке (exe или dll файлу). Вызывать для него Path.GetFullPath не имеет смысла. Далее вы склеиваете путь к файлу с другим именем файлам. Как вы думаете будет ли найден такой файл?

А теперь сравните с тем кодом который я вам советовал в сообщении #3:
Цитата Сообщение от OwenGlendower Посмотреть сообщение
C#
1
data.location = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Dan");
C#
1
data.location = Path.Combine(Application.StartupPath, "Dan");
Цитата Сообщение от Bond-007 Посмотреть сообщение
System.IO.DirectoryNotFoundException:
"Could not find a part of the path 'C:\Users\User\Desktop\BOND\BoTest\BoTes t\BoTest.Desktop\bin\Debug\net7.0\BoTest.dll\Dan\rep.xml[/B]'."
1) Учитесь читать сообщения об ошибках. DirectoryNotFoundException означает "каталог не найден". Это должно заставить вас присмотреться к пути.
2) Выделенная красным часть пути это как раз следствие ошибки описанной выше.

P.S. Вы не ответили на мой вопрос про List<T> - как можно программировать на .NET и не знать про List<T>?
0
0 / 0 / 0
Регистрация: 08.11.2023
Сообщений: 64
23.07.2024, 13:38  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
P.S. Вы не ответили на мой вопрос про List<T> - как можно программировать на .NET и не знать про List<T>?
я не представляю как вам ответить, с чего то же нужно начинать ?)

Добавлено через 18 минут
Цитата Сообщение от OwenGlendower Посмотреть сообщение
System.IO.DirectoryNotFoundException:
"Could not find a part of the path 'C:\Users\User\Desktop\BOND\BoTest\BoTes t\BoTest.Desktop\bin\Debug\net7.0\BoTest .dll\Dan\rep.xml[/B]'."
вот эта ошибка появляется в старом файле ( который я уже удалил, но как то не чайно закинул обратно и он с замком, тоесть его изменять нельзя) как его можно удалить ? удаляю из папки, но он просто по новой появляется (
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,844
Записей в блоге: 1
23.07.2024, 14:33
Цитата Сообщение от Bond-007 Посмотреть сообщение
удаляю из папки, но он просто по новой появляется (
Из какой папки? Покажите скриншот.

Цитата Сообщение от Bond-007 Посмотреть сообщение
я не представляю как вам ответить, с чего то же нужно начинать ?)
Например, "я студент первого курса и нам такое не еще рассказывали". Или "я самоучка, изучаю язык по <список источников> и пока не сталкивался с этим классом".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.07.2024, 14:33
Помогаю со студенческими работами здесь

Возможно сделать CSS-выборку элементов, которые идут перед <div>?
Есть такая выборка div &gt; a { ... код ... } &lt;div&gt; &lt;a&gt;&lt;/a&gt; // выберет этот элемент &lt;/div&gt; А можно сделать подобное? a...

Как сделать выборку?
$data = $this-&gt;crud-&gt;select('dohod' , array('username'=&gt;$name)); есть вот этот код, который берет из базы данных дату, но когда значений...

как сделать выборку
Задание: Авторемонтные мастерские Минимальный список характеристик: • Номер водительских прав, ФИО, адрес и телефон владельца...

Как сделать выборку из БД
Здраствуйте, подскажите пожалуйста как можно сделать выборку из опеределенного столбца например (из столбца &quot;выборка&quot; значение...

Как сделать выборку?
У меня такая ситуация: дано поле со списком. если я начинаю в его вводить какое-нибудь слово, то оно ищет соответствие с имеющимися в нем...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru