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)
请尝试此XPath查询:
(/rss/channel/item)[position() <= 5]
Run Code Online (Sandbox Code Playgroud)
它仅返回前五个匹配项.括号很重要,因为没有它们,该[position() <= 5]部分适用于item元素在其父元素中的位置,而不是它在结果节点集中的位置.
如果要继续使用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)
| 归档时间: |
|
| 查看次数: |
3716 次 |
| 最近记录: |