Get a specific number of results from an XmlDocument XPath query
我正在查询Twitter的RSS提要,并将结果提供给中继器进行显示。我只想得到xpath查询的前5个结果。在xpath语法中,有没有一种方法可以做到这一点,或者我需要循环生成的
1 2 3 4 5 6 7 8 9 | 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(); |
请尝试此xpath查询:
1 | (/rss/channel/item)[position() <= 5] |
它只返回前五个匹配项。括号很重要,因为没有括号,
如果您想继续使用xpath,那么应该查看xpath中的position()方法。使用类似这样的谓词…
1 | [position() < 6] |
…结果应将结果限制在前5项。韦尔博格的答案是你在这里最好的参考(+1到韦尔博格)。
但是,如果你能使用.NET 3.5,那么我建议你看看我的答案…
在10行以下的简单代码中,您能做的最酷的事情是什么?帮助我激励初学者!
…再看一看联合API,它使处理RSS提要更加容易。然后,如果您只需要5个项目,请使用Linq方法接受集合以获取特定数量的项目。
这将允许您更好地表达自己,而不必担心提要、名称空间等的结构。
我意识到这并不是直接回答你的问题,但是因为很多人不知道.NET中的这些新API,所以我想我会在这里提到它们。
所以,你得到5个项目的代码是这样的…
1 2 3 4 5 6 7 | var xmlr = XmlReader.Create("http://twitter.com/statuses/public_timeline.rss") var first5Items = SyndicationFeed .Load(xmlr) .GetRss20Formatter() .Feed .Items .Take(5); |