Преобразовать XpathNodeIterator в список<XElement>
В C# я отсортировал RSS-канал, используя XpathExpression и собственную функцию сравнения для поля Дата публикации.
Мне нужно конвертировать это отсортировано XPathNodeIterator
возражать против List<XElement>
Объект общего типа Linq. Я пытался использовать промежуточный тип данных, но безуспешно.
Пытался:
List<XElement> elements = new List<XElement>();
IEnumerable<XElement> sortedElements;
IEnumerable<XElement> newElements;
sortedElements = (IEnumerable <XElement>) iterator;
Я также пытался использовать порядок в списке, но это было неудачно, используя только List<XElement>
,
1 ответ
Так как это IEnumerable
, самый простой способ преобразовать в IEnumerable<>
это использовать OfType
, как это:
var sortedElements = iterator.OfType<XPathNavigator>();
Это не даст вам XElement
объекты; это часть отдельного XML API. Тем не менее XPathNavigator
объекты могут иметь необходимые данные, поэтому вы можете получить Select
в зависимости от того, что вам нужно:
var elementValues = iterator.OfType<XPathNavigator>().Select(n => n.Value);
Если вы хотите использовать System.Linq.Xml
вы можете переписать свой XPath как LINQ на XDocument
вместо.
Я знаю, что этот вопрос старый, но вы проверили, работает ли это?
var xmlStrings = iterator.OfType<XPathNavigator>().Select(n => n.OuterXml).ToList();
var xmlElements = new List<XElement>();
xmlStrings.ForEach(el => xmlElements.Add(XElement.Parse(el)));