Преобразовать 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)));
Другие вопросы по тегам