Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2014, 15:04   #1
ackid
Новичок
Джуниор
 
Регистрация: 02.07.2014
Сообщений: 3
По умолчанию Link to XML (read data)

Всем доброго дня!
Вопрос собственно вот в чем!
Есть XML вида:

Цитата:
<root version="1.0">
<child1 value = "1"/>
<child2 value = "2"/>
<!-- Child3(1..n) -->
<child3>
<-- куча всякой инфы -->
<child3/>
<root/>
Необходимо преобразовать в объект вида :
public class Child
{
public Dictionary<string, string> Fields;
public IEnumerable<Dictionary<string, string>> Childs3List;
}

Использую System.Linq, и тут получается начинается самое интересное
Прямо код вставлю как делаю

Код:
var xmlDocument = new XmlDocument();
xmlDocument.LoadXML("text");
var xmlResponse = xmlDocument.DocumentElement;

Child = new Child
{
Childs3List = from XmlElement xmlRow in xmlResponse.SelectNodes("child3")
                        select (
                                    xmlRow.ChildNodes.Cast<XmlElement>().
                                    ToDictionary(field => field.Name, field =>          field.GetAttribute("value"))
                                )   
}
Вопрос - как мне засунуть child1 и child2 в структуру типа Dictionary<string, string>.
Конечно есть вариант Fields.add(), но вот если таких полей с сотню. Как нить автоматом пробежаться бы по ним и вставить.

Если кто нить сталкивался с такой задачкой, подскажите... спасибо!)
ackid вне форума Ответить с цитированием
Старый 02.07.2014, 16:23   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

так а тоже самое только с рута, почему не получается?
eval вне форума Ответить с цитированием
Старый 02.07.2014, 17:03   #3
ackid
Новичок
Джуниор
 
Регистрация: 02.07.2014
Сообщений: 3
По умолчанию

Надо попробовать, пока получилось через foreach , но как говорится нет так красиво как хотелось бы...
ackid вне форума Ответить с цитированием
Старый 03.07.2014, 05:41   #4
ackid
Новичок
Джуниор
 
Регистрация: 02.07.2014
Сообщений: 3
По умолчанию

Все получилось всем спасибо))))

Через root, ошибка была в том что надо было where ставить... как то сразу не сообразил...что у меня ключики то повторяются)))
пример -

Код:
Child = new Child
{
Fields = xmlResponse.ChildNodes.Cast<XmlElement>().
           where(x => x.name != "child3").
           ToDictionary(field => field.Name, field => field.GetAttribute("value")),

Childs3List = from XmlElement xmlRow in xmlResponse.SelectNodes("child3")
                        select (
                                    xmlRow.ChildNodes.Cast<XmlElement>().
                                    ToDictionary(field => field.Name, field =>          field.GetAttribute("value"))
                                )   
}
ackid вне форума Ответить с цитированием
Старый 03.07.2014, 09:42   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
ошибка была в том что надо было where ставить...
это же очевидно, отсеить - условие.. как? вопрос техники, будет where, или иф в цикле - не принцепиально
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как подружить TP-Link TL-R460 и D-Link Dir-300 magistic Компьютерное железо 1 10.10.2012 11:56
missing data provider or data packet Dexes БД в Delphi 3 06.01.2012 11:58
Создание Data Link File Volodq БД в Delphi 4 30.05.2011 10:17
XML Data Binding в Delphi 7 artemavd Общие вопросы Delphi 0 23.07.2010 06:19
Окно Data link properties не выходит Spot БД в Delphi 2 21.02.2009 18:38