在C#中,我使用 XpathExpression 对RSS feed进行了排序,并为字段Publication Date自定义了比较函数。
我需要将此已排序的XPathNodeIterator
对象转换为List<XElement>
&#39; Generic Linq类型&#39;宾语。我试图使用中间数据类型,但没有任何运气。
尝试:
List<XElement> elements = new List<XElement>();
IEnumerable<XElement> sortedElements;
IEnumerable<XElement> newElements;
sortedElements = (IEnumerable <XElement>) iterator;
我还尝试在列表中使用order by,但仅使用List<XElement>
不成功。
答案 0 :(得分: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
内容,则可以在XDocument
上将您的XPath重写为LINQ。
答案 1 :(得分:0)
我知道这个问题很旧,但是您检查过是否可行?
var xmlStrings = iterator.OfType<XPathNavigator>().Select(n => n.OuterXml).ToList();
var xmlElements = new List<XElement>();
xmlStrings.ForEach(el => xmlElements.Add(XElement.Parse(el)));