我正在查询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();
答案 0 :(得分:9)
请尝试使用此XPath查询:
(/rss/channel/item)[position() <= 5]
仅返回前五个匹配项。括号很重要,因为如果没有它们,[position() <= 5]
部分将应用于item
元素在其父级中的位置,而不是它在结果节点集中的位置。
答案 1 :(得分:8)
如果要继续使用xpath,则应该查看xpath中的position()方法。使用这样的谓词...
[position() < 6]
...应该导致结果仅限于前5个项目。 Welbog的答案是你最好的参考(+1给Welbog)。
然而,如果您能够使用.NET 3.5,那么我建议您在这里查看我的答案...
What is the coolest thing you can do in <10 lines of simple code? Help me inspire beginners!
...并查看联合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);