Использовать RSS-канал XML и отображать информацию - PullRequest
3 голосов
/ 14 ноября 2011

Я должен использовать фид 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?

Ответы [ 2 ]

5 голосов
/ 15 ноября 2011

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

  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 следует ожидать, имеет Wikipedia . Код для загрузки файла XML основан на этом отличном сообщении в блоге об использовании HttpWebRequest.

0 голосов
/ 04 ноября 2013
...