Question

J'ai un fichier XML que je veux accéder à un Windows Phone 7 et l'application Silverlight. fichier XML Th est sur un serveur web, et je veux y accéder par http: //www.mydomain. com / data / this_is_my_file.xml .

Comment puis-je utiliser cette URL pour charger le fichier XML dans un XDocument?

Était-ce utile?

La solution

Vous pouvez utiliser WebClient ou HttpWebRequest télécharger (de façon asynchrone) et analyser la réponse. L'un des plus simple approche de télécharger et analyser XML à partir du Web est ci-dessous -

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 est le chemin vers le fichier XML sur le Web. XmlItem est une classe comme si -

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

Vous devez noter que vous pouvez rencontrer exception croisée fil si vous mettez à jour une collection observable. Dans l'exemple ci-dessus, XmlItems est un List<XmlItem>. Toutefois, si vous souhaitez ajouter les années XMLItem à une collection observable, utilisez ce morceau de code à la place -

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

Une autre approche consiste à utiliser HttpWebRequest. Vous pouvez lire au sujet de cette approche et utiliser le code dans l'échantillon.

HTH, indyfromoz

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top