我有一個XML文件,我想在Windows Phone 7和Silverlight應用程序中訪問。 Th XML文件位於網絡服務器上,我想通過http://www.mydomain.com/data/this_is_my_file.xml訪問它。從網站加載XML文件到XDocument(Silverlight和Windows Phone 7)
如何使用此URL將XML文件加載到XDocument中?
我有一個XML文件,我想在Windows Phone 7和Silverlight應用程序中訪問。 Th XML文件位於網絡服務器上,我想通過http://www.mydomain.com/data/this_is_my_file.xml訪問它。從網站加載XML文件到XDocument(Silverlight和Windows Phone 7)
如何使用此URL將XML文件加載到XDocument中?
您可以使用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
。您可以使用read about this approach here並使用示例中的代碼。
HTH,indyfromoz
嗨菲利普,Indy的演示代碼看起來不錯。我傾向於使用HttpWebRequest而不是WebClient,如果您的下載不是微不足道的,以避免對您的UI性能產生負面影響。如果您的下載直接更新UI,您可以使用上面所示的調度程序來解決跨線程訪問問題,或者先將數據下拉到非UI容器中,然後通過調度程序將其加載到ViewModel或其他UI綁定容器中,或者回到UI線程上。 – 2010-10-23 12:47:21
@MickN - 試着理解你的評論.....所以,你認爲我錯過了我的答案? – indyfromoz 2010-10-23 18:46:57
Nah,這是個不錯的萌芽,因此可以添加到您的文章中,而不是單獨編寫,只是Filip需要考慮的一些額外信息。 Filip的重要程度取決於他使用的是什麼。 – 2010-10-24 00:35:07