2009-09-01 65 views
1

我有一个DLL(我因许多原因)无法更改。我使用这个程序集来检索一个XPathNodeIterator在C#中排序XPathNodeIterator的内容

我知道我可以排序与上XPathNavigatorXPathExpression XML得到一个XPathNodeIterator,问题是,我从XPathNodeIterator开始是有什么办法之后应用排序?

回答

5

XPathNodeIterator是非通用的IEnumerableXPathNavigator。因此,如果你使用.NET 3.5和LINQ,你可以做这样的事情:

IEnumerable<XPathNavigator> sorted = 
    from XPathNavigator nav in nodeIterator 
    orderby nav.GetAttribute("@id") 
    select nav; 
+0

+1为提供解决方案:) – 2009-09-01 17:35:16

+0

在任何情况下,我在本地进行了测试,它似乎工作确实,感谢 现在我希望我可以在项目上使用此解决方案(取决于如果我可以安装.net 3.5上的测试服务器,如果客户愿意将其安装在他的服务器上) – Sander 2009-09-01 21:58:36

1

由于这种类型是一个迭代器,因此没有办法在没有枚举整个迭代器的情况下对内容进行排序并将数据加载到不同的可排序结构中。

请参阅XPathNodeIterator Members以获取此类型的成员列表(不幸的是,其中没有一个支持排序)。

+0

是的,这是我希望避免:) – Sander 2009-09-01 17:27:38

+0

有没有性能上的差异。使用从'XmlDocument','XPathDocument'或'XDocument'获得的'XPathNavigator'的XPath查询都未经过优化,并将使用线性扫描。所以如果你自己做同样的事情,你不会失去任何东西。 – 2009-09-01 17:32:35