Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 1 / 1
Регистрация: 27.09.2017
Сообщений: 45

Составление XML запроса

29.07.2021, 12:22. Показов 2341. Ответов 2

Студворк — интернет-сервис помощи студентам
У меня есть XML документ с вот такой структурой.
XML
1
2
3
4
5
6
7
8
9
10
<Communication>
    <Network name="gjjk">
      <ConnectedAP apName="AP1" iedName="1">
      </ConnectedAP>
    </Network>
</Communication>
<Tools>
    <AccessPoint name="AP1">
    </AccessPoint>
</Tools>
Мне необходимо выбрать все AccessPoint, у которых нет ConnectedAP[apName] == AccessPoint[name]. Помогите составить запрос, пожалуйста?
Всё, что я могу родить сам -
C#
1
2
3
4
5
6
XmlNodeList listConnectedAP = doc.SelectNodes("//AccessPoint");
foreach (XmlNode cap in listConnectedAP)
{
     if(doc.SelectNodes($"//ConnectedAP[@name = '{cap.SelectSingleNode("@name").Value}'").Count == 0);
      //Do smth with cap
 }
Можео ли это оформить как-то в одну строку?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.07.2021, 12:22
Ответы с готовыми решениями:

Составление POST запроса
Есть такая структура запроса: Host: 173.45.117.66 Connection: keep-alive sign-code: e826dab7cbc0bd73dd402b8fcbca544e Origin:...

Составление запроса ORDER BY CHAR_LENGHT
Не могу составить запрос правильно, проблема в синтаксисе. Help me please)) List&lt;Form1.Brand&gt; Brands = new...

NHibernate: составление маппинга либо запроса к БД
Проблема вкратце: при запросе выбора всех записей из таблицы parents получаю дублирующийся набор из таблицы children, в которую помещен FK...

2
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3422 / 2741 / 575
Регистрация: 04.09.2018
Сообщений: 8,610
Записей в блоге: 3
29.07.2021, 15:52
Цитата Сообщение от D-V-A Посмотреть сообщение
Можео ли это оформить как-то в одну строку?
А если <AccessPoint> будет несколько? Так или иначе нужно обходить все ноды.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
30.07.2021, 03:24
Лучший ответ Сообщение было отмечено D-V-A как решение

Решение

Цитата Сообщение от D-V-A Посмотреть сообщение
Можео ли это оформить как-то в одну строку?
В одну строку можно, но для каждой точки будет повторно парситься xml:

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
using System;
using System.Linq;
using System.Xml.Linq;
 
class Program
{
    static void Main()
    {
        XElement xml = XElement.Parse(
@"<Parent>
  <Communication>
      <Network name=""gjjk"">
        <ConnectedAP apName=""AP2"" iedName=""1"">
        </ConnectedAP>
      </Network>
      <Network name=""gjjl"">
        <ConnectedAP apName=""AP3"" iedName=""1"">
        </ConnectedAP>
      </Network>
  </Communication>
  <Tools>
      <AccessPoint name=""AP1"">
      </AccessPoint>
      <AccessPoint name=""AP3"">
      </AccessPoint>
      <AccessPoint name=""AP4"">
      </AccessPoint>
  </Tools>
</Parent>");
 
        var ap = xml.Descendants("AccessPoint").Where(x => !xml.Descendants("ConnectedAP").Select(y => y.Attribute("apName").Value).Contains(x.Attribute("name").Value));
 
        foreach (var x in ap)
            Console.WriteLine(x.Attribute("name").Value);
 
        Console.ReadKey();
    }
}
Лучше сохранить промежуточный результат:

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
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
 
class Program
{
    static void Main()
    {
        XElement xml = XElement.Parse(
@"<Parent>
  <Communication>
      <Network name=""gjjk"">
        <ConnectedAP apName=""AP2"" iedName=""1"">
        </ConnectedAP>
      </Network>
      <Network name=""gjjl"">
        <ConnectedAP apName=""AP3"" iedName=""1"">
        </ConnectedAP>
      </Network>
  </Communication>
  <Tools>
      <AccessPoint name=""AP1"">
      </AccessPoint>
      <AccessPoint name=""AP3"">
      </AccessPoint>
      <AccessPoint name=""AP4"">
      </AccessPoint>
  </Tools>
</Parent>");
 
        var cap = new HashSet<string>(xml.Descendants("ConnectedAP").Select(x => x.Attribute("apName").Value));
        var ap = xml.Descendants("AccessPoint").Where(x => !cap.Contains(x.Attribute("name").Value));
 
        foreach (var x in ap)
            Console.WriteLine(x.Attribute("name").Value);
 
        Console.ReadKey();
    }
}
Если от AccessPoint нужен только параметр, то можно так:

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
using System;
using System.Linq;
using System.Xml.Linq;
 
class Program
{
    static void Main()
    {
        XElement xml = XElement.Parse(
@"<Parent>
  <Communication>
      <Network name=""gjjk"">
        <ConnectedAP apName=""AP2"" iedName=""1"">
        </ConnectedAP>
      </Network>
      <Network name=""gjjl"">
        <ConnectedAP apName=""AP3"" iedName=""1"">
        </ConnectedAP>
      </Network>
  </Communication>
  <Tools>
      <AccessPoint name=""AP1"">
      </AccessPoint>
      <AccessPoint name=""AP3"">
      </AccessPoint>
      <AccessPoint name=""AP4"">
      </AccessPoint>
  </Tools>
</Parent>");
 
        Console.WriteLine(string.Join("\n", xml.Descendants("AccessPoint").Select(x => x.Attribute("name").Value)
            .Except(xml.Descendants("ConnectedAP").Select(x => x.Attribute("apName").Value))));
        Console.ReadKey();
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2021, 03:24
Помогаю со студенческими работами здесь

Entity sql составление запроса с DISTINCT по одному полю
Доброго всем времени суток. Нужно разработать запрос для получения данных на Entity sql. Обычный запрос создать не проблема, но мне нужен...

Выгрузка в XML файл результатов запроса. Создание xml схемы с имеющегося xml файла
Доброго времени суток. Имеется необходимый для загрузки пример XML файла и из него необходимо построить XML схему для выгрузки данных...

Составление запроса
Доброго времени суток. Нужна помощи по составлению запроса по инструкции. Вот она $src = '&lt;?xml version=&quot;1.0&quot;...

Составление запроса
есть 2 таблицы special: id naimspec allspecial: id kspec namespec во allspecial хранится список специальностей, в special...

Составление запроса
Всем привет. У меня не получается составить нужный запрос к базе. Есть база: id----header----text----date ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
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-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru