2016-04-19 7 views
0

Ich habe einen RSS-Feed, den ich gerade 2 Elemente anzeigen, was ich will, ist für jedes Mal, wenn die Seite neu geladen wird, dass eine andere 2 Elemente angezeigt werden. Der Code, den ich derzeit habe, istWählen Sie 2 zufällige Elemente aus einem RSS-Feed

//BBC UK 
string RssFeedUrl = "http://feeds.bbci.co.uk/news/uk/rss.xml?edition=uk"; 


List<Feeds> feeds = new List<Feeds>(); 
try 
{ 
    XDocument xDoc = new XDocument(); 
    xDoc = XDocument.Load(RssFeedUrl); 

    var items = (from x in xDoc.Descendants("item").Take(2) 
    select new 
    { 
     title = x.Element("title").Value, 
     link = x.Element("link").Value, 
     pubDate = x.Element("pubDate").Value, 
     description = x.Element("description").Value 
    }); 

    foreach (var i in items) 
    { 
     Feeds f = new Feeds 
     { 
      Title = i.title, 
      Link = i.link, 
      PublishDate = i.pubDate, 
      Description = i.description 
     }; 

     feeds.Add(f);   
    } 

Wie zu ändern, um jedes Mal, wenn die Seite neu geladen wird, 2 zufällige Elemente auszuwählen.

Antwort

1

Sie Random Klasse verwenden könnten zwei Zufallszahlen zu erzeugen und diese beiden nehmen Elemente aus der Sammlung.

int[] randints = new int[2]; 
    Random rnd = new Random(); 
    randints[0] = rnd.Next(0, xDoc.Descendants("item").Count()); // creates first random number 


    do 
    { 
     randints[1] = rnd.Next(0, xDoc.Descendants("item").Count()); // creates second random number 
    }while (randints[1] == randints[0]); // make sure that you don't have duplicates. 


var items = xDoc.Descendants("item") 
    .Skip(randints[0]-1) 
    .Take(1) 
    .Concat(xDoc.Descendants("item") 
       .Skip(randints[1]-1) 
       .Take(1)) 
    .Select(x=> new 
     { 
      title = x.Element("title").Value, 
      link = x.Element("link").Value, 
      pubDate = x.Element("pubDate").Value, 
      description = x.Element("description").Value 
     }); 

foreach (var i in items) 
{ 
    Feeds f = new Feeds 
    { 
     Title = i.title, 
     Link = i.link, 
     PublishDate = i.pubDate, 
     Description = i.description 
    }; 

    feeds.Add(f);   
} 
+0

Vielen Dank dafür - funktioniert ein Vergnügen – KlydeMonroe

+0

Großartig, ich bin froh, dass es Ihnen geholfen hat. –

0

Ich würde besser diese Werte für einige Zeit zwischengespeichert werden, anstatt jedes Mal anzufordern, aber wenn die Leistung hier nicht kritisch ist, ist eine Lösung

XDocument xDoc = XDocument.Load(RssFeedUrl); 
var rnd = new Random(); 
var twoRand = xDoc.Descendants("item") 
       .OrderBy(e => rnd.Next()).Take(2).Select(...) 
       .ToList();