5

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();
4

2 に答える 2

10

代わりに、次の XPath クエリを試してください。

(/rss/channel/item)[position() <= 5]

一致する最初の 5 つの項目のみを返します。括弧がないと、結果ノード セット内の要素の位置ではなく、親内[position() <= 5]の要素の位置にパーツが適用されるため、括弧は重要です。item

于 2009-12-01T16:36:22.743 に答える
8

xpath を引き続き使用する場合は、xpath の position() メソッドを確認する必要があります。このような述語を使用すると...

[position() < 6]

... 結果を最初の 5 項目のみに制限する必要があります。Welbog の回答は、ここでの最良のリファレンスです (Welbog に +1)。

ただし、.NET 3.5 を使用できる場合は、こちらの回答をご覧になることをお勧めします...

10 行未満の単純なコードでできる最もクールなことは何ですか? 初心者に刺激を与えるのを手伝ってください!

...そして、RSS フィードの処理をより簡単にするシンジケーション API を見てみましょう。次に、5 つのアイテムのみが必要な場合は、LINQ メソッド Take on the collection を使用して、特定の数のアイテムを取得します。

これにより、フィードの構造や名前空間などについて心配する必要がなくなり、自分自身をよりよく表現できるようになります。

これがあなたの質問に直接答えているわけではないことは承知していますが、.NET のこれらの新しい API について知らない人が多いので、ここで言及したいと思います。

したがって、5 つのアイテムだけを取得するコードは次のようになります...

var xmlr = XmlReader.Create("http://twitter.com/statuses/public_timeline.rss")
var first5Items = SyndicationFeed
                    .Load(xmlr)
                    .GetRss20Formatter()
                    .Feed
                    .Items
                    .Take(5);  
于 2009-12-01T16:36:50.310 に答える