将 XML 文件从网站加载到 XDocument(Silverlight 和 Windows Phone 7) [英] Load an XML file from a website into XDocument (Silverlight and Windows Phone 7)
问题描述
我有一个 XML 文件,我想在 Windows Phone 7 和 Silverlight 应用程序中访问它.XML 文件位于网络服务器上,我想通过 http://www.mydomain 访问它.com/data/this_is_my_file.xml.
I have an XML file that I want to access in an Windows Phone 7 and Silverlight application. Th XML file is on a webserver, and I want to access it through http://www.mydomain.com/data/this_is_my_file.xml.
如何使用此 URL 将 XML 文件加载到 XDocument 中?
How do I use this URL to load the XML file into an XDocument?
推荐答案
您可以使用 WebClient
或 HttpWebRequest
下载(异步)并解析响应.从网络下载和解析 XML 的最简单方法之一如下 -
You can use WebClient
or HttpWebRequest
to download (asynchronously) and parse the response. One of the simplest approach to download and parse XML from the web is below -
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
是 Web 上 XML 文件的路径.XmlItem
就是这样一个类 -
xmlUrl
is the path to the XML file on the web. XmlItem
is a class like so -
public class XmlItem
{
public string Title { get; set; }
public string Description { get; set; }
public Uri Url { get; set; }
}
需要注意的是,如果你是在更新一个可观察的集合,你可能会遇到跨线程异常.在上面的例子中,XmlItems 是一个 List
.但是,如果您希望将 XMLItem 添加到可观察集合中,请改用这段代码 -
You need to note that you may encounter cross-thread exception if you are updating an observable collection. In the above example, XmlItems is a List<XmlItem>
. However, if you wish to add the XMLItem's to an observable collection, use this piece of code instead -
Dispatcher.BeginInvoke(() =>
{
XmlItems.Clear();
foreach (RssFeedItem item in rssFeedItems)
{
XmlItems.Add(item);
}
});
另一种方法是使用 HttpWebRequest
.您可以 在此处阅读此方法并使用示例中的代码.
An alternative approach is to use HttpWebRequest
. You can read about this approach here and use the code in the sample.
HTH, indyfromoz
HTH, indyfromoz
这篇关于将 XML 文件从网站加载到 XDocument(Silverlight 和 Windows Phone 7)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!