Charger un fichier XML à partir d'un site Web en XDocument (Silverlight et Windows Phone 7)
-
25-09-2019 - |
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?
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