将URL中的xml文件加载到XDocument中

时间:2012-04-22 16:43:14

标签: c# xml windows-phone-7 rss linq-to-xml

道歉,如果这有点简单,但我对C#很新。在WP7应用程序中,我正在尝试使用XDocument.Load()方法将XML文件(特别是Blogger提要)加载到XDocument中。但是,当我尝试以下内容时:

XDocument data = XDocument.Load("http://destroyedordamaged.blogspot.com/feeds/posts/default");

我收到错误:

无法打开'http://destroyedordamaged.blogspot.com/feeds/posts/default'。 Uri参数必须是指向Silverlight应用程序的XAP包内的内容的相对路径。如果您需要从任意Uri加载内容,请参阅使用WebClient / HttpWebRequest加载XML内容的文档

所以我环顾四周,发现有人建议我这样做:

WebClient wc = new WebClient();
wc.OpenReadCompleted += wc_OpenReadCompleted;
wc.OpenReadAsync(new Uri("http://destroyedordamaged.blogspot.com/feeds/posts/default"));

private void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            Console.WriteLine("THERE IS AN ERROR: "+e.Error.Message);
            return;
        }
        using (Stream s = e.Result)
        {
            data = XDocument.Load(s);
        }
    } 

但这似乎也不起作用;它没有加载任何内容到XDocument。这里有什么我想念的吗?我想找出将xml从feed加载到XDocument中的最简单方法。

我浏览了一下,但似乎每个遇到此类问题的人都将其代码指向特定的.xml文件而不是没有像我这样的扩展程序的网址。

我很感激您提供的任何输入。非常感谢。

2 个答案:

答案 0 :(得分:2)

尝试使用DownloadStringAsync代替OpenReadAsync

var webClient = new WebClient();
webClient.DownloadStringCompleted += RequestCompleted;
webClient.DownloadStringAsync(new Uri(SOURCE));

RequestCompleted代码:

    private void RequestCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            var feedXml = XDocument.Parse(e.Result);
            // (...)
        }
    }

前段时间我在我的应用程序中使用过它,所以我很确定它有效。

答案 1 :(得分:0)

查看Windows Phone代码示例的天气预报示例。我用这个样本来熟悉如何做这些事情。下载源代码并查看Forecast.cs。

Sample code link