问题
I'm querying a Twitter RSS feed and supplying the results into a Repeater for display. I'd like to only get the first 5 results of the XPath query. Is there a way to do that in the XPath syntax or do I have to loop over the resulting XmlNodeList
to pull out the first 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();
回答1:
Try this XPath query instead:
(/rss/channel/item)[position() <= 5]
It returns only the first five matching items. The parentheses are important, as without them the [position() <= 5]
part applies to the item
element's position in its parent rather than its position in the result node set.
回答2:
If you want to continue using xpath then you should look at the position() method in xpath. Using a predicate something like this...
[position() < 6]
... should result limit the results to only the first 5 items. Welbog's answer is your best reference here (+1 to Welbog).
However, if you're able to use .NET 3.5 then I would recommend you look at my answer here...
What is the coolest thing you can do in <10 lines of simple code? Help me inspire beginners!
... and take a look at the syndication APIs that make dealing with RSS feeds much easier. Then, if you only want 5 items, use the LINQ method Take on the collection to take a specific number of items.
This will allow you to express yourself better and not have to worry about the structure of the feed, namespaces etc.
I realise this isn't directly answering your question but as many people don't know about these new APIs in .NET I thought I'd mention them here.
So, your code to get just 5 items would be something like this...
var xmlr = XmlReader.Create("http://twitter.com/statuses/public_timeline.rss")
var first5Items = SyndicationFeed
.Load(xmlr)
.GetRss20Formatter()
.Feed
.Items
.Take(5);
来源:https://stackoverflow.com/questions/1827361/get-a-specific-number-of-results-from-an-xmldocument-xpath-query