从XmlDocument XPath查询中获取特定数量的结果

Mar*_*ino 5 asp.net xpath xmldocument

我正在查询Twitter RSS提要并将结果提供给Repeater进行显示.我只想获得XPath查询的前5个结果.有没有办法在XPath语法中做到这一点,或者我必须循环结果XmlNodeList以拉出前5?

XmlDocument doc = new XmlDocument();
XmlTextReader reader = new XmlTextReader(rssPath);
doc.Load(reader);

XmlNodeList items = doc.SelectNodes("/rss/channel/item");

rptTwitter.ItemDataBound += new RepeaterItemEventHandler(rptTwitter_ItemDataBound);
rptTwitter.DataSource = items;
rptTwitter.DataBind();
Run Code Online (Sandbox Code Playgroud)

Wel*_*bog 9

请尝试此XPath查询:

(/rss/channel/item)[position() <= 5]
Run Code Online (Sandbox Code Playgroud)

它仅返回前五个匹配项.括号很重要,因为没有它们,该[position() <= 5]部分适用于item元素在其父元素中的位置,而不是它在结果节点集中的位置.


Mar*_*eck 8

如果要继续使用xpath,则应该查看xpath中的position()方法.使用类似这样的谓词......

[position() < 6]
Run Code Online (Sandbox Code Playgroud)

...应该将结果限制为仅前5个项目.Welbog的答案是你最好的参考(+1给Welbog).

但是,如果您能够使用.NET 3.5,那么我建议您在这里查看我的答案......

在<10行简单代码中你能做的最酷的事情是什么?帮助我激励初学者!

...并查看联合API,以便更轻松地处理RSS提要.然后,如果您只需要5个项目,请使用LINQ方法接受集合以获取特定数量的项目.

这样您就可以更好地表达自己,而不必担心Feed的结构,命名空间等.

我意识到这不是直接回答你的问题,但是很多人不知道.NET中的这些新API,我想我会在这里提到它们.

所以,你只需要5个项目的代码就是这样的......

var xmlr = XmlReader.Create("http://twitter.com/statuses/public_timeline.rss")
var first5Items = SyndicationFeed
                    .Load(xmlr)
                    .GetRss20Formatter()
                    .Feed
                    .Items
                    .Take(5);  
Run Code Online (Sandbox Code Playgroud)