1125 Я хотел бы продолжить ответ Брайана Маккатона. Я полагаю, что есть несколько различных (очень философских) аспектов, которые стоит рассмотреть.
Можно утверждать, что причина, по которой вы можете наследовать непосредственно из Throwable
, заключается в том, что система типов Java не имеет способа запретить такое расширение, и что иерархия Throwable
не была разработана для добавления большего количества классов, которые не подклассы Error
или Exception
. Вероятно, это причина того, что такие вещи, как NonLocalReturnException
или BreakException
были первоначально подтипами RuntimeException
, а не напрямую Throwable
.
Другой момент заключается в том, что при введении такого маркера это должен был быть trait
. И снова в системе типов Scala нет способа обеспечить, чтобы классы, которые будут смешиваться в этой черте, были , а не подклассами в Exception
.
Вместе эти два факта означают, что, возможно, исторически существовали подклассы ControlThrowable
(тогда ControlException
), которые являются подклассами Exception
. Имея это в виду, становится ясно, что наборы типов, пойманные в этих двух случаях, не были непересекающимися по замыслу. Да, почти через год после введения ControlException
он был изменен на ControlThrowable
, но в тот момент не было способа обеспечить выполнение всех других (пользовательских) подклассов сделать то же самое переключение.
Еще один философский момент в отношении такого кода, как в этом примере, заключается в том, что даже если в программе нет подтипов ControlThrowable
, которые являются подтипами Exception
, и первый случай действительно не влияет на поведение Во втором случае (как это наиболее вероятно сегодня), он все еще показывает, что разработчик задумался над этой конкретной деталью. И, очевидно, код должен быть написан как для других людей, так и для компьютеров.
Как последнее примечание, сегодня вы, вероятно, должны использовать NonFatal
, который вместо этого включает тест для ControlThrowable
.
См.
http://msdn.microsoft.com/en-us/library/bb943474.aspx
http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx
http://msdn.microsoft.com/en-us/library/bb943480.aspx
В основном существует много материала в платформе.Net 3.5, которая делает трудную работу парсинга и представления подачи; не трудно записать приложение с 30 строками, которое берет в URL канала и загружает канал и печатает заголовок и автора всех объектов, например. (Работы для RSS 2.0 (не другие!) или Atom.)
Если Вы фокусируетесь на создании RSS-ридер а не на логике синтаксического анализа RSS, Вы могли бы хотеть делегировать каналы RSS создания/чтения, пользующиеся этой свободной Библиотекой RSS, названной Арготический на CodePlex.com
Необходимо работать со спецификацией XML RSS: http://cyber.law.harvard.edu/rss/rss.html
Если Вы пишете, что полнофункциональный читатель, не пользуясь никакой библиотекой, также думает, что существует подача ATOM к синтаксическому анализу.
Сам RSS действительно прост. Просто XML-описание канала и список объектов на том канале (возможно с файлами, присоединенными к каждому объекту). Отслеживание обновлений является немного хитрой, и руководящей кодировкой, и времена/даты сообщения хитро также все же. Реальный кошмар является всеми различными "интерпретациями" формата RSS, который используют различные сайты. Если Вы действительно пишете программу чтения новостных лент, Вы могли бы хотеть запуститься с парсинга Atom, поскольку это - более стандартизированный формат и могло бы заставить Вас далее быстрее с хорошим дизайном отклоняться в RSS от. Но действительно, необходимо просто пользоваться библиотекой парсинга RSS - предпочтительно самая совместимая доступная (но не платите за библиотеку RSS; они достаточно распространены).
RSS является диалектом XML, поэтому если Вы знаете XML, у Вас есть часть решенной проблемы. Если Вы хотите запуск на своем проекте, уже рассматриваете рассмотрение проектов с открытым исходным кодом там:
http://www.codeplex.com/site/search?projectSearchText=RSS%20Reader
CodePlex (выше) является хорошим местом для запуска, как большинство проектов будет в C#.
Как рекомендовал другой автор, класс SyndicationFeed и Argotic являются лучшими альтернативами.
Если производительность является проблемой, класс SyndicationFeed будет намного лучше. Я оценил его как примерно в 9 раз быстрее, чем Argotic на моем оборудовании.
Проблема, с которой я столкнулся с классом SyndicationFeed, заключалась в его способности успешно анализировать любой случайный поток из сети. На удивление часто возникает ошибка XmlException.
В своих целях я придерживаюсь Argotic. В конце концов, это открытый исходный код, поэтому я всегда могу внести изменения, если потребуется.
Предлагаю вам использовать
RSS.NET - это библиотека классов .NET с открытым исходным кодом для RSS-каналов. Он предоставляет многократно используемую объектную модель для синтаксического анализа и написания RSS-каналов. Он полностью совместим с версиями RSS 0.90, 0.91, 0.92 и 2.0.1, реализуя все конструкции.
Поскольку стандартный канал распространения не поддерживает другие версии rss.
Рассмотрите возможность чтения исходного кода для RSS Bandit , который представляет собой программу чтения RSS Winforms (возможно, скоро WPF) на C #.
Вы должны получить несколько хороших идей, просто пройдя через приложение.