#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:
Вам нужно сделать две вещи:
- Загрузите XML-файл канала с указанного там URL-адреса
- Проанализируйте 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
.