Грамотный LINQ-to-XML: Лучшая практика для десериализации атрибута/значения к структурированным парам переменной/значения

Технический Разговор о Google: Linus Torvalds на мерзавце

http://www.youtube.com/watch?v=4XpnKHJAok8

страница

сравнения Wiki Мерзавца http://git.or.cz/gitwiki/GitSvnComparsion

5
задан Nano Taboada 3 August 2009 в 15:03
поделиться

2 ответа

Обычно мне нужно одно представление каждого элемента, а не одну последовательность «одного» значений и другую последовательность «двух» значений. Другими словами, я ожидал чего-то вроде:

var items = config.Descendants("item")
                  .Select(element => Item.FromXElement(element));

Если у вас много атрибутов в одном элементе, я считаю полезным выделить код «создать объект из этого элемента» в отдельный метод (в этом case Item.FromXElement ), а не вставлять все это в запрос. Если Item не должен знать о своем представлении LINQ to XML, поместите метод где-нибудь, который должен:)

items тогда IEnumerable , который вы можете преобразовать в список или что-то еще, что вы хотите сделать.

Конечно, это действительно зависит от того, что вы пытаетесь сделать - а мы этого не делаем. Я действительно знаю, что это означает. Может быть, вы действительно действительно хотите, чтобы каждая «последовательность атрибутов» отдельно ...


Item.FromXElement выглядела бы примерно так:

public static Item FromXElement(XElement element)
{
    string name = (string) element.Attribute("name");
    string host = (string) element.Attribute("host");
    // etc
    return new Item(name, host, ...);
}

(Очевидно, что вы должны создать конструктор с соответствующими параметрами .)

3
ответ дан 15 December 2019 в 01:08
поделиться

Я бы сделал это:

XDocument config = XDocument.Load("whatever.conf");

var pairs = from q in config.Descendants("item")
           select new {
               One = (string)q.Attribute("one"),
               Two = (string)q.Attribute("two") };

var ones = pairs.Select(pair => pair.One);
var twos = pairs.Select(pair => pair.Two);
1
ответ дан 15 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: