Загрузить файл XML с веб-сайта в XDocument (Silverlight и Windows Phone 7) - PullRequest
2 голосов
/ 23 октября 2010

У меня есть файл XML, к которому я хочу получить доступ в приложении Windows Phone 7 и Silverlight. Файл XML находится на веб-сервере, и я хочу получить к нему доступ через http://www.mydomain.com/data/this_is_my_file.xml.

Как использовать этот URL для загрузки файла XML в XDocument?

1 Ответ

11 голосов
/ 23 октября 2010

Вы можете использовать WebClient или HttpWebRequest для загрузки (асинхронно) и анализа ответа. Ниже приведен один из самых простых способов загрузки и анализа XML из Интернета -

public void LoadXmlItems(string xmlUrl)
{
   WebClient client = new WebClient();

   client.OpenReadCompleted += (sender, e) =>
   {
        if (e.Error != null)
            return;

        Stream str = e.Result;
        XDocument xdoc = XDocument.Load(str);

        // take 10 first results
        List<RssFeedItem> rssFeedItems = (from item in xdoc.Descendants("item")
                                            select new XmlItem()
                                            {
                                                Title = item.Element("title").Value,
                                                Description = item.Element("description").Value,
                                                Url = new Uri(item.Element("link").Value, UriKind.Absolute)
                                            }).ToList();
        // close
        str.Close();

        // add results to the list
        XmlItems.Clear();
        foreach (RssFeedItem item in rssFeedItems)
        {
           XmlItems.Add(item);
        }
    };
    client.OpenReadAsync(new Uri(xmlUrl, UriKind.Absolute));
}

xmlUrl - это путь к XML-файлу в сети. XmlItem такой класс -

public class XmlItem
{
  public string Title { get; set; }
  public string Description { get; set; }
  public Uri Url { get; set; }
}

Вы должны заметить, что при обновлении наблюдаемой коллекции вы можете столкнуться с межпотоковым исключением. В приведенном выше примере XmlItems является List<XmlItem>. Однако, если вы хотите добавить XMLItem в наблюдаемую коллекцию, используйте вместо этого этот фрагмент кода -

Dispatcher.BeginInvoke(() =>
{
  XmlItems.Clear();
  foreach (RssFeedItem item in rssFeedItems)
  {
     XmlItems.Add(item);
  }
});

Альтернативный подход - использовать HttpWebRequest. Вы можете прочитать об этом подходе здесь и использовать код в примере.

HTH, индифромоз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...