Загрузить Xdocument с RSS-фидом в приложении MVVM - PullRequest
2 голосов
/ 24 января 2012

Я изучаю MVVM & Linq в xml, конвертируя простое wpf RSS-приложение. Первоначально я использовал XmlDataProvider для загрузки локальных файлов XML или URL-адресов RSS. Теперь я использую приведенный ниже код, который прекрасно работает при загрузке локальных XML-файлов, но выдает «FileNotFoundException», когда его URL-адрес. Во время отладки я вижу правильный URL-адрес в (строка RSS_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 ]

2 голосов
/ 24 января 2012

XDocument.Load () будет принимать URL-адреса без каких-либо проблем.Проблема в вашем коде заключается в том, что вы используете File.Exists (), чтобы определить, действителен ли его URL.File.Exists () принимает только путь к файловой системе, а не uri.

Быстрый фрагмент дополнительной информации: метод Load () опирается на базовый XmlReader и вызов Create ().Если ресурс (в данном случае URL-адрес) не существует, будет выдано исключение WebException, указывающее, что ресурс не существует.

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

XmlReader.Создать информацию: http://msdn.microsoft.com/en-us/library/w8k674bf.aspx

0 голосов
/ 24 января 2012

Используемая вами перегрузка XDocument.Load предназначена специально для загрузки из файла.Вы должны были бы загрузить из RSS-канала, чтобы получить данные XML локально.Посмотрите документ MSDN здесь , чтобы найти альтернативы, такие как чтение из потока, которые могут лучше всего соответствовать вашим потребностям.

...