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

Чтение xml

09.11.2013, 12:24. Показов 2014. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть файлы со структурой
Код XML
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Город E="499">
          <Улица E="Большая">
            <Дом ID="1">
              <Квартира N="5" F="Иванов" H="1"/>
              <Квартира N="6" F="Козлов" H="2" B="8"/>
            </Дом>
          </Улица>
</Город>
<Город E="495">
          <Улица E="Малая">
            <Дом ID="9">
              <Квартира N="5" F="Петров" H="1" S="1"/>
              <Квартира N="6" F="Козлов" H="2" W="0"/>
            </Дом>
          </Улица>
</Город>
Как мне написать запрос в linq чтоб получить группу в строку:
Город 495 Улица Большая Дом 1 Кв 5 ФИО Иванов
Город 495 Улица Малая Дом 9 Кв 5 ФИО Петров
Город 495 Улица Малая Дом 9 Кв 6 ФИО Козлов

Добавлено через 2 часа 10 минут
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
41
42
43
44
string files = "C:\\vse\\file.XML";
 
            XmlTextReader doc = new XmlTextReader(files);
 
            doc.WhitespaceHandling = WhitespaceHandling.None;
 
            string City = null;
            string Street = null;
            string House = null;
            while (doc.Read())
            {
                if (doc.Name == "Город")
                {
                    doc.MoveToAttribute("City");
                    for (int i = 0; i < doc.AttributeCount; i++)
                    {
                        City = doc.Value;
                        //Console.WriteLine(doc.Name + "=" + doc.Value);
                    }
                }
 
                if (doc.Name == "Улица")
                {
                    doc.MoveToAttribute("Street");
                    for (int i = 0; i < doc.AttributeCount; i++)
                    {
                        Street = doc.Value;
                        //Console.WriteLine(doc.Name + "=" + doc.Value);
                    }
                }
 
 
                if (doc.Name == "Дом")
                {
                    doc.MoveToAttribute("House");
                    for (int i = 0; i < doc.AttributeCount; i++)
                    {
                        House = doc.Value;
                        //Console.WriteLine(doc.Name + "=" + doc.Value);
                    }
                }
 
 Console.WriteLine(City + "*" + Street + "*" + House );
}
Но вы водит не то что мне нужно
во первых пропадает из улицы другие атрибуты если попадаются да и много чего лишнего еще выводит.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.11.2013, 12:24
Ответы с готовыми решениями:

Чтение XML
Доброго ... Подскажите пожалуйста как прочитать из xml файла вот такие данные: &lt;sequence name=&quot;INFERNO&quot;...

Чтение XML C#
Здравствуйте! Я только учусь , поэтому простите... Есть XML к примеру: &lt;Заказы&gt; &lt;Vopros7 A=&quot;Текст для Текст бокса&quot;...

Чтение XML
Здравствуйте господа, есть фрагмент кода, с помощью которого я осуществляю парсинг: var reader = new...

12
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
09.11.2013, 13:10
gares, покажите весь xml
1
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 8
09.11.2013, 13:26  [ТС]
XML
1
2
3
<?xml version="1.0" encoding="windows-1251" standalone="no" ?>
<Head тут тех данные о файле  />
И тут идет продолжение того,что выше
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
09.11.2013, 14:40
gares, может такой файл?
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<Head>
  <Город E="499">
    <Улица E="Большая">
      <Дом ID="1">
        <Квартира N="5" F="Иванов" H="1"/>
        <Квартира N="6" F="Козлов" H="2" B="8"/>
      </Дом>
    </Улица>
  </Город>
  <Город E="495">
    <Улица E="Малая">
      <Дом ID="9">
        <Квартира N="5" F="Петров" H="1" S="1"/>
        <Квартира N="6" F="Козлов" H="2" W="0"/>
      </Дом>
    </Улица>
  </Город>
</Head>
ведь в файле имеются 2 элемента "Город", они должны быть вложены в один какой-нибудь элемент
ниже код xml, который вы имеете ввиду выдаст ошибку
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<Head тут="" тех="" данные="" о="" файле=""  />
  <Город E="499">
    <Улица E="Большая">
      <Дом ID="1">
        <Квартира N="5" F="Иванов" H="1"/>
        <Квартира N="6" F="Козлов" H="2" B="8"/>
      </Дом>
    </Улица>
  </Город>
  <Город E="495">
    <Улица E="Малая">
      <Дом ID="9">
        <Квартира N="5" F="Петров" H="1" S="1"/>
        <Квартира N="6" F="Козлов" H="2" W="0"/>
      </Дом>
    </Улица>
  </Город>
Добавлено через 2 минуты
должен быть один корневой элемент
1
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 8
09.11.2013, 14:51  [ТС]
Цитата Сообщение от Diman777 Посмотреть сообщение
gares, может такой файл?
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<Head>
  <Город E="499">
    <Улица E="Большая">
      <Дом ID="1">
        <Квартира N="5" F="Иванов" H="1"/>
        <Квартира N="6" F="Козлов" H="2" B="8"/>
      </Дом>
    </Улица>
  </Город>
  <Город E="495">
    <Улица E="Малая">
      <Дом ID="9">
        <Квартира N="5" F="Петров" H="1" S="1"/>
        <Квартира N="6" F="Козлов" H="2" W="0"/>
      </Дом>
    </Улица>
  </Город>
</Head>
ведь в файле имеются 2 элемента "Город", они должны быть вложены в один какой-нибудь элемент
ниже код xml, который вы имеете ввиду выдаст ошибку
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<Head тут="" тех="" данные="" о="" файле=""  />
  <Город E="499">
    <Улица E="Большая">
      <Дом ID="1">
        <Квартира N="5" F="Иванов" H="1"/>
        <Квартира N="6" F="Козлов" H="2" B="8"/>
      </Дом>
    </Улица>
  </Город>
  <Город E="495">
    <Улица E="Малая">
      <Дом ID="9">
        <Квартира N="5" F="Петров" H="1" S="1"/>
        <Квартира N="6" F="Козлов" H="2" W="0"/>
      </Дом>
    </Улица>
  </Город>
Добавлено через 2 минуты
должен быть один корневой элемент
Нет вот
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8"?>
<File> 
<Head> </Head>
  <Город E="499">
    <Улица E="Большая">
      <Дом ID="1">
        <Квартира N="5" F="Иванов" H="1"/>
        <Квартира N="6" F="Козлов" H="2" B="8"/>
      </Дом>
    </Улица>
  </Город>
  <Город E="495">
    <Улица E="Малая">
      <Дом ID="9">
        <Квартира N="5" F="Петров" H="1" S="1"/>
        <Квартира N="6" F="Козлов" H="2" W="0"/>
      </Дом>
    </Улица>
  </Город>
</File>
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
09.11.2013, 15:01
Цитата Сообщение от gares Посмотреть сообщение
Нет вот
дык с этого и надо было начинать
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
using System.Xml.Linq;
 
namespace ConsoleApplication14
{
    class Program
    {
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load("file.xml");
            var result = doc.Descendants("Квартира").
                Select(x => new 
                { 
                    flat = x.Attribute("N").Value, 
                    FIO = x.Attribute("F").Value, 
                    house = x.Ancestors("Дом").First().Attribute("ID").Value,
                    street = x.Ancestors("Улица").First().Attribute("E").Value,
                    city = x.Ancestors("Город").First().Attribute("E").Value
                });
 
            List<string> list = new List<string>();
 
            foreach (var item in result)
            {
                list.Add(string.Format("Город {0}, Улица {1}, Дом {2}, Квартира {3}, ФИО {4}",
                    item.city, item.street, item.house, item.flat, item.FIO));
            }
 
            foreach (string str in list)
            {
                Console.WriteLine(str);
            }
 
            Console.ReadKey();
        }
    }
}
1
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 8
09.11.2013, 15:21  [ТС]
Там где Улица или Дом могут быть два элемента как быть?
<Улица E="Большая" L = "10">
<Дом ID="1" K= "6">
а могут и не быть.
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
09.11.2013, 15:30
Цитата Сообщение от gares Посмотреть сообщение
как быть?
если эти атрибуты нужны - то просто добавить... что тут сложного то?
если не нужны то и хай с ними... прога считывает только указанные атрибуты (у "Улица" будет считывать только "E")
1
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 8
09.11.2013, 15:37  [ТС]
Цитата Сообщение от Diman777 Посмотреть сообщение
если эти атрибуты нужны - то просто добавить... что тут сложного то?
если не нужны то и хай с ними... прога считывает только указанные атрибуты (у "Улица" будет считывать только "E")
Если добавить и его там нет то программа ругается что атрибут пустой.

И все же Дмитрий если с моей конструкцией работать то как можно объединить?

Добавлено через 3 минуты
Цитата Сообщение от gares Посмотреть сообщение
Если добавить и его там нет то программа ругается что атрибут пустой.

И все же Дмитрий если с моей конструкцией работать то как можно объединить?
Так как мне не известно будет ли там тот или иной атрибут.
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
09.11.2013, 16:05
Цитата Сообщение от gares Посмотреть сообщение
<Улица E="Большая" L = "10">
<Дом ID="1" K= "6">
как должен выглядеть конечный результат?
1
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 8
09.11.2013, 16:58  [ТС]
Цитата Сообщение от Diman777 Посмотреть сообщение
как должен выглядеть конечный результат?
Так же как выше но если нет к примеру атрибута то null
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
09.11.2013, 20:25
Цитата Сообщение от gares Посмотреть сообщение
Так как мне не известно будет ли там тот или иной атрибут.
сделал для элемента "Дом", аналогично и с элементом "Улица"... надеюсь разберетесь сами
C#
1
2
3
4
5
6
7
8
9
10
11
            var result = doc.Descendants("Квартира").
                Select(x => new
                {
                    flat = x.Attribute("N").Value,
                    FIO = x.Attribute("F").Value,
                    house = x.Ancestors("Дом").First().Attributes().Count() == 0 ? "" : x.Ancestors("Дом").First().Attributes().
                                Select(str => str.Value.ToString()).
                                Aggregate((a, b) => string.Concat(a, " ", b)),
                    street = x.Ancestors("Улица").First().Attribute("E").Value,
                    city = x.Ancestors("Город").First().Attribute("E").Value
                });
1
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 8
09.11.2013, 21:01  [ТС]
Цитата Сообщение от Diman777 Посмотреть сообщение
сделал для элемента "Дом", аналогично и с элементом "Улица"... надеюсь разберетесь сами
C#
1
2
3
4
5
6
7
8
9
10
11
            var result = doc.Descendants("Квартира").
                Select(x => new
                {
                    flat = x.Attribute("N").Value,
                    FIO = x.Attribute("F").Value,
                    house = x.Ancestors("Дом").First().Attributes().Count() == 0 ? "" : x.Ancestors("Дом").First().Attributes().
                                Select(str => str.Value.ToString()).
                                Aggregate((a, b) => string.Concat(a, " ", b)),
                    street = x.Ancestors("Улица").First().Attribute("E").Value,
                    city = x.Ancestors("Город").First().Attribute("E").Value
                });
Спасибо тебе огромнейшие голову ломал бы еще долго но если Это будет Элемент Квартира как быть то??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.11.2013, 21:01
Помогаю со студенческими работами здесь

Чтение XML
есть БД на XML. &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt; &lt;data&gt; &lt;user login=&quot;sasha&quot; id=&quot;001&quot; password=&quot;qwer&quot; status=&quot;0&quot; /&gt; ...

Чтение из XML
Я конечно жестко извиняюсь, но в чем ошибка? &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt; &lt;Заказы&gt; &lt;a1&gt;ПИби&lt;/a1&gt; ...

Чтение XML 2.0
Здравствуйте!!! Не подскажите как прочитай XML файл версии 2.0? Заранее спасибо!

Чтение из XML
Есть XML файл, есть две переменные (допустим А и Б) и листбокс. В листбоксе выбираем какой exchangerate считывать из XML и из этого рядка...

Чтение xml
Добрый день! Имеется xml файл такого содержания: &lt;response list=&quot;true&quot;&gt; &lt;count&gt;19189&lt;/count&gt; &lt;user&gt; ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта 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 На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru