Главная » Silverlight » Лента RSS

0

Формат RSS основан на спецификации XML и предназначен для публикации часто обновляемого содержимого, такого как блоги или новости. Документы RSS называются лентами. Клиентское приложение RSS периодически проверяет ленту и сообщает о ее новых элементах.

В инфраструктуру .NET 3.5 введены классы, поддерживающие форматы RSS 2.0 и Atom 1.0. Позаимствовав эти классы, платформа Silverlight позволяет читать информа­цию RSS, не прибегая к синтаксическому разбору кода XML. Классы, поддерживающие форматы ленты, определены в пространстве имен System. ServiceModel. Syndication. Для доступа к ним в проект нужно добавить ссылку на сборку System. ServiceModel. Syndication.dll.

При использовании лент RSS важно помнить, что приложение ограничено кроссдо- менными правилами доступа, описанными в начале главы. Если лента расположена на веб-сервере, не разрешающем кроссдоменный доступ, будет сгенерирована ошибка. Кроме того, ленты тоже содержат ссылки. Например, элемент ленты может содержать ссылку на страницу блога или новостей. Прежде чем пытаться загрузить страницу, нужно прове­рить, разрешает ли веб-сервер, на котором она расположена, кроссдоменный доступ.

Необходимо также учитывать следующее. Элементы ленты RSS обычно указыва­ют на страницы HTML. Однако даже после успешной загрузки содержимого HTML возникают проблемы с форматированием и выводом ленты в области содержимого Silverlight. Поэтому лучше вывести ленту в другой части текущей страницы HTML, на­пример под элементом управления Silverlight. На рис. 20.6 показан пример, в котором страница Silverlight, выводящая ленту (сверху), объединена с обычным элементом <if- rame>, который выводит страницу, связанную с выбранным элементом.

Рис. 20.6. Просмотр ленты RSS и элементов новостей

Для создания данного примера нужен адрес URL ленты. В примере используется адрес www. feeds. feedburner. com. ZDNetBlogs, указывающий на блог с элементами но­востей на сайте ZDNet. Ленты — это документы XML. Поэтому их можно загружать с по­мощью знакомых вам методов DownloadStringAsync () или OpenReadAsync О . Второй метод более эффективный, потому что хранить весь документ XML в памяти как строку нет необходимости.

private void cmdGetData_Click(object sender,

RoutedEventArgs e)

{

WebClient client = new WebClient(); Ori address =

new Uri("http://feeds.feedburner.com/ZDNetBlogs"); client. OpenReadCompleted += client_OpenReadCompleted; client.OpenReadAsync(address) ;

}

При чтении ответа содержимое XML можно загрузить в объект SyndicationFeed. Класс SyndicationFeed предоставляет свойства, содержащие такие параметры лен­ты, как автор, дата последнего обновления, резюме и т.д. Наиболее важное свойство

Items содержит коллекцию объектов Syndicationltem, показанных в решетке Grid на рис. 20.6. Ниже приведен код загрузки ленты.

private void client_OpenReadCompleted (object sender, OpenReadCompletedEventArgs e)

{ \ ‘

try {

XmlReader reader = XmlReader.Create(e.Result) ; ‘ SyndicationFeed feed = SyndicationFeed.Load(reader); gridFeed.ItemsSource = feed.Items; reader.Close();

)

catch (Exception err) {

lblError.Text = "Ошибка при загрузке ленты.";

}

}

Чтобы вывести на экран информацию, хранящуюся в каждом объекте Syndica­tionltem, нужно извлечь ее с помощью пользовательского выражения связывания. Свойства Authors, Title, Summary и PublishDate ленты возвращают разные типы объ­ектов (все они определены в пространстве имен System. ServiceModel. Syndication). В примере, показанном на рис. 20.6, используются свойства Title и Summary.

<my:DataGrid> <my:DataGrid.Columns>

‘ <my:DataGridTextColumn Binding="{Binding Title.Text}" ElementStyle="{StaticResource DataGridWrapStyle}" /> <my:DataGridTextColumn Width="400" Binding="{Binding Summary.Text, Converter={StaticResource HtmlCleanUp)}" Elementstyle="{StaticResource DataGridWrapStyle}" /> </my:DataGrid.Columns> </my:DataGrid>

В решетке DataGrid применяется пользовательский стиль (см. главу 17). Преобразователь значений удаляет из резюме дескрипторы HTML и сокращает его, если оно содержит слишком много символов.

При щелчке на элементе в решетке DataGrid приведенный ниже обработчик извле­кает соответствующий объект Syndicationltem и находит в свойстве Links адрес URL. Адрес указывает на страницу HTML, которая содержит полную версию данных. Затем обработчик подключает страницу к элементу <iframe> для вывода ее на экран.

private void gridFeed_SelectionChanged(object sender, EventArgs e)

{

II Получение выбранного элемента Syndicationltem selectedltem = (.Syndicationltem) gridFeed.Selectedltem;

II Получение элемента <iframe> HtmlElement element =

HtmlPage.Document.GetElementByid("rssFrame");

// Подключение страницы к элементу <iframe> element.SetAttribute("src", selectedltem.Links [0] . Uri.ToString () ) ;

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии