将XpathNodeIterator转换为List <xelement> </xelement>

时间:2015-04-16 18:53:39

标签: c# list xelement xpathnodeiterator

在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>不成功。

2 个答案:

答案 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)));