Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск внутри дерева XML, Как возвратить список в нутри ветки? 
V
    Опции темы
murzilka6002
Дата 25.6.2013, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 12.11.2011

Репутация: нет
Всего: нет



есть структура XML файла
Код

<Root>
  <Rzsf243062013 From="Rzeszów" To="Berlin" Date="30.06.2013" Seats="345" Plane="sf24" Price="67" /> 
  <Wa36321122013 From="Warszawa" To="Rzeszów" Date="21.12.2013" Seats="162" Plane="363" Price="86">
     <TKowal12061976 Name="Tomasz" Surname="Kowal" Birthday="12.06.1976" /> 
     <JSinda06091989 Name="Janusz" Surname="Sinda" Birthday="06.09.1989" /> 
  </Wa36321122013>
</Root>


мне нужно два варианта списка: первого уровня, тоесть ветки от Root делаю вот таким способом
Код

List<Plane> planes = new List<Plane>();

            XDocument main;
            using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                main = XDocument.Load(fileStream);
                foreach (var item in main.Root.Descendants())
                {
                    try
                    {
                        planes.Add(new Plane(item.Attribute("From").Value.ToString(),
                                             item.Attribute("To").Value.ToString(),
                                             item.Attribute("Plane").Value.ToString(),
                                             GetDateFromString(item.Attribute("Date").Value.ToString()),
                                             Int32.Parse(item.Attribute("Seats").Value.ToString()),
                                             Int32.Parse(item.Attribute("Price").Value.ToString())
                                             )
                                             );
                    }
                    catch { }
                }
            }

            return planes;

и мне нужен список элементов второго уровня внутри каждой ветки если таковые имеються, например Wa36321122013
пробовал подобным способом 
Код

List<Passenger> passengers = new List<Passenger>();

            XDocument main;
            using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                main = XDocument.Load(fileStream);
                foreach (var item in main.Root.Descendants("Wa36321122013"))
                {
                    try
                    {
                        passengers.Add(new Passenger(item.Attribute("Name").Value.ToString(),
                                             item.Attribute("Surname").Value.ToString(),
                                             GetDateFromString(item.Attribute("Birthday").Value.ToString())
                                             )
                                             );
                    }
                    catch { }
                }
            }

            return passengers;


но...увы не получаеться... что неправильно (подозреваю что многое), и как бы сделать правильно? smile
PM MAIL   Вверх
murzilka6002
Дата 25.6.2013, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 12.11.2011

Репутация: нет
Всего: нет



Нашел решение 
Код

List<Passenger> passengers = new List<Passenger>();

            XDocument main;
            using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                main = XDocument.Load(fileStream);

                foreach (XElement item in main.Root.Descendants(namePlane))
                {
                    try
                    {
                        foreach (XElement x in item.Elements())
                        {
                            passengers.Add(new Passenger(x.Attribute("Name").Value.ToString(),
                                                 x.Attribute("Surname").Value.ToString(),
                                                 GetDateFromString(x.Attribute("Birthday").Value.ToString())
                                                 )
                                                 );
                        }
                    }
                    catch { }
                }
            }

            return passengers;


Всем спасибо за просмотры  smile 
PM MAIL   Вверх
IBS
Дата 25.6.2013, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 29.7.2008
Где: Белоруссия

Репутация: нет
Всего: 6



а почему бы не бахнуть покрасивее, типо такого:
Код

return XDocument.Load(fileName).Root.Descendants(namePlane).SelectMany(item=>item.Elements().Select(x=>new Passenger(/*тра-та-та*/)))


Если делать так, то можно еще и выигрыш получить за счет отложенного выполнения linq

Это сообщение отредактировал(а) IBS - 25.6.2013, 21:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.1056 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.