Страницы

Поиск по вопросам

вторник, 7 апреля 2020 г.

Использование .ToList() с XDocument

#c_sharp #net #xml #linq #разметка

                    
Есть вот такое выражение:

var ext =
                xDoc.XPathSelectElements("*//nodes")
                    .DescendantNodes().ToList();


И по нему есть несколько вопросов:

1) На выходе я получаю List. Могу я его на ходу преобразовать в List
? Пробовал различные вариации преобразований, но получаю ругань компилятора.

2)Можно ли получить не просто коллекцию List, а ,допустим, List,
где string- это какой-нибудь из атрибутов XElement ?
    


Ответы

Ответ 1



XElement - это наследник XNode, поэтому список узлов в список элементов можно преобразовать операцией .OfType: var ext = xDoc.XPathSelectElements("*//nodes").DescendantNodes().OfType().ToList(); Но в вашем случае проще с самого начала выбрать Descendants() вместо DescendantNodes(): var ext = xDoc.XPathSelectElements("*//nodes").Descendants().ToList(); А еще проще можно сделать вот так: var ext = xDoc.XPathSelectElements("*//nodes//*").ToList(); Или вот так: var ext = xDoc.Root.Descendants("nodes").Descendants().ToList(); По второму вопросу - такой коллекции как List, не существует. Поэтому не вполне понятно что вы пытаетесь получить. Возможно, вам нужен словарь: var ext = xDoc.Root.Descendants("nodes").Descendants().ToDictionary(x => (string)x.Attribute("name")); Или Lookup: var ext = xDoc.Root.Descendants("nodes").Descendants().ToLookup(x => (string)x.Attribute("name"));

Комментариев нет:

Отправить комментарий