在MVVM应用程序中使用RSS提要加载Xdocument

时间:2012-01-24 16:34:31

标签: c# wpf mvvm linq-to-xml

我正在学习MVVM& Linq to xml通过转换一个简单的wpf RSS应用程序。最初,我使用XmlDataProvider加载本地xml文件或RSS URL。我现在使用下面的代码,可以很好地加载本地xml文件,但是当它的url时抛出“FileNotFoundException”。在调试过程中,我在(字符串RSS_URL)中看到了正确的url地址,但找不到该文件。我最初的搜索引导我到Webclient& HttpWebRequest,但我没有取得任何成功。我是在正确的轨道上吗?是否有可用的代码或教程链接?

public static List<RSSItem> Load(string RSS_URL)
    {
        if (!File.Exists(RSS_URL))
        {
            throw new FileNotFoundException("Datasource file could not be found", RSS_URL);
        }

        var rssfiles = XDocument.Load(RSS_URL).Descendants("item").Select(
            x => new RSSItem(
                (string)x.Element("title"),
                (string)x.Element("link"),
                (string)x.Element("description"))); 

        return rssfiles.ToList();
    }

谢谢

2 个答案:

答案 0 :(得分:2)

XDocument.Load()将毫无问题地接受URL。您的代码中的问题是您正在使用File.Exists()来确定他的URL是否有效。 File.Exists()只接受文件系统路径,而不是uri。

快速附加信息:Load()方法依赖于底层的XmlReader和对Create()的调用。如果资源(在这种情况下为URL)不存在,则将抛出WebException,指示资源不存在。

XDocument.Load信息: http://msdn.microsoft.com/en-us/library/bb343181.aspx

XmlReader.Create信息: http://msdn.microsoft.com/en-us/library/w8k674bf.aspx

答案 1 :(得分:0)

您正在使用的XDocument.Load重载专门用于从文件加载。您必须从RSS源下载才能在本地获取XML数据。查看MSDN文档here,了解从流中读取的替代方法,这可能更适合您的需求。