#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"));
Комментариев нет:
Отправить комментарий