我正在尝试为Windows Phone 8制作RSS应用程序,但每当我尝试使用XmlReader下载RSS内容时都会出现错误。
using System.Xml.Linq;
using System.Net;
using System.ServiceModel.Syndication;
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Ignore;
XmlReader reader = XmlReader.Create(http://feeds.bbci.co.uk/news/business/rss.xml, settings);
SyndicationFeed feed = SyndicationFeed.Load(reader);
reader.Close();
错误发现在“XmlReader reader = XmlReader.Create ....”行中。完整的错误消息是:
System.Xml.ni.dll中出现'System.Xml.XmlException'类型的第一次机会异常
其他信息:无法打开“http://feeds.bbci.co.uk/news/business/rss.xml”。 Uri参数必须是文件系统相对路径。
感谢您的帮助! :)
答案 0 :(得分:2)
您收到该错误是因为它希望LocalStorage
中的文件不是网址。因此,您必须下载文件并将其转换为:
public MainPage()
{
// our web downloader
WebClient downloader = new WebClient();
// our web address to download, notice the UriKind.Absolute
Uri uri = new Uri("http://feeds.bbci.co.uk/news/business/rss.xml", UriKind.Absolute);
// we need to wait for the file to download completely, so lets hook the DownloadComplete Event
downloader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(FileDownloadComplete);
// start the download
downloader.DownloadStringAsync(uri);
}
// this event will fire if the download was successful
void FileDownloadComplete(object sender, DownloadStringCompletedEventArgs e)
{
// e.Result will contain the files byte for byte
// your settings
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Ignore;
// create a memory stream for us to use from the bytes of the downloaded file
MemoryStream ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(e.Result ?? ""));
// create your reader from the stream of bytes
XmlReader reader = XmlReader.Create(ms, settings);
// do whatever you want with the reader
// ........
// close
reader.Close()
}