Использовать XML-файл RSS-канала и отображать информацию

#c# #.net #visual-studio #windows-phone-7 #feed

#c# #.net #visual-studio #windows-phone-7 #лента

Вопрос:

Я должен использовать XML-канал (RSS) в моем приложении Windows Phone 7 и отображать эту информацию в ListBox .

Следующим образом я попытался прочитать содержимое в XML-канале:

   private void button1_Click(object sender, RoutedEventArgs e)
  {            
          client.DownloadStringAsync(new Uri("http://earthquake.usgs.gov/eqcenter/recenteqsww/catalogs/eqs7day-M2.5.xml"), "usgs");
  }
  

Может кто-нибудь, пожалуйста, подсказать мне, как получить XML-информацию и отобразить их в виде элементов ListBox?

Ответ №1:

Вам нужно сделать две вещи:

  1. Загрузите XML-файл канала с указанного там URL-адреса
  2. Проанализируйте XML и обработайте полученный XML-документ

Следующий код показывает, как это сделать:

( GetFeed выполняет часть 1, handleFeed выполняет часть 2, button1_Click является обработчиком кликов, который запускает загрузку канала, когда пользователь нажимает кнопку.)

 // this method downloads the feed without blocking the UI;
// when finished it calls the given action
public void GetFeed(Action<string> doSomethingWithFeed)
{
    HttpWebRequest request = HttpWebRequest.CreateHttp("http://earthquake.usgs.gov/eqcenter/recenteqsww/catalogs/eqs7day-M2.5.xml");
    request.BeginGetResponse(
        asyncCallback =>
        {
            string data = null;

            using (WebResponse response = request.EndGetResponse(asyncCallback))
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    data = reader.ReadToEnd();
                }
            }
            Deployment.Current.Dispatcher.BeginInvoke(() => doSomethingWithFeed(data));
        }
        , null);
}

// this method will be called by GetFeed once the feed has been downloaded
private void handleFeed(string feedString)
{
    // build XML DOM from feed string
    XDocument doc = XDocument.Parse(feedString);

    // show title of feed in TextBlock
    textBlock1.Text = doc.Element("rss").Element("channel").Element("title").Value;
    // add each feed item to a ListBox
    foreach (var item in doc.Descendants("item"))
    {
        listBox1.Items.Add(item.Element("title").Value);
    }

    // continue here...
}

// user clicks a button -> start feed download
private void button1_Click(object sender, RoutedEventArgs e)
{
    GetFeed(handleFeed);
}
  

Большая часть проверок на ошибки опущена для краткости. Некоторая информация о том, какие элементы XML следует ожидать, есть в Википедии. Код для загрузки XML-файла основан на этом превосходном сообщении в блоге об использовании HttpWebRequest .