获取url 一个RSS订阅并打开在xaml windows Pho
本文关键字:image Pho xaml windows 一个 src img url 获取 RSS | 更新日期: 2023-09-27 18:17:12
我有这样一个类:
class clsFeed
{
public string Title { get; set; }
public string Summary { get; set; }
public string PublishDate { get; set; }
public string Content { get; set; }
public string Image { get; set; }
public Uri Link { get; set; }
}
和我需要得到位于标签http://www.unnu.com/feed内的标签,并在我的主页上与其他数据的列表中打开此地址。这是我使用的代码。它编译,但在我看来他总是空的。
private void UpdateFeedList(string feedXML)
{
// Load the feed into a SyndicationFeed instance
StringReader stringReader = new StringReader(feedXML);
XmlReader xmlReader = XmlReader.Create(stringReader);
SyndicationFeed feed = SyndicationFeed.Load(xmlReader);
//var counter = feed.Items.Count();
var lista = feed.Items.ToList().Select(s => new clsFeed
{
Title = s.Title.Text,
Summary = s.Summary.Text,
PublishDate = s.PublishDate.Date.ToString(),
Content = "",
Imagem = s.Summary.Text.Split('<')[5].Replace("img src='", "").Replace("' border='0' />", ""),
Link = s.Links.FirstOrDefault().Uri
}).ToList();
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
// Bind the list of SyndicationItems to our ListBox
feedListBox.ItemsSource = lista;
feedListBox.ItemsSource = feed.Items;
//progressIndicator.IsVisible = false;
});
//gridProgressBar.Visibility = Visibility.Collapsed; //Quando atualiza a lista de feeds esconde a progress bar.
panorama.Visibility = Visibility.Visible;
}
private void UpdateFeedList(string feedXML)
{
// Load the feed into a SyndicationFeed instance
StringReader stringReader = new StringReader(feedXML);
XmlReader xmlReader = XmlReader.Create(stringReader);
SyndicationFeed feed = SyndicationFeed.Load(xmlReader);
// In Windows Phone OS 7.1, WebClient events are raised on the same type of thread they were called upon.
// For example, if WebClient was run on a background thread, the event would be raised on the background thread.
// While WebClient can raise an event on the UI thread if called from the UI thread, a best practice is to always
// use the Dispatcher to update the UI. This keeps the UI thread free from heavy processing.
var lista = feed.Items.ToList().Select(s => new clsFeed
{
Title = s.Title.Text,
Summary = s.Summary.Text,
PublishDate = s.PublishDate.Date.ToString(),
Content = "",
Imagem = Regex.Match(feedXML, @"<img's+src='(.+)''s+border='0''s+/>").Groups[1].Value,
Link = s.Links.FirstOrDefault().Uri
}).ToList();
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
// Bind the list of SyndicationItems to our ListBox
feedListBox.ItemsSource = lista;
});
gridProgressBar.Visibility = Visibility.Collapsed; //Quando atualiza a lista de feeds esconde a progress bar.
panorama.Visibility = Visibility.Visible;
}
这工作,但没有出现在屏幕上。有人知道为什么吗?
我的列表框保持不变。
没有任何错误。
<ListBox x:Name="feedListBox" HorizontalAlignment="Left" Height="537" Margin="10,72,0,0" VerticalAlignment="Top" Width="398" SelectionChanged="listFeedBox_SelectionChanged" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel VerticalAlignment="Top">
<Grid>
<Image Width="400" Height="130" Name="img" Source="{Binding feed.ImageUrl}"/>
</Grid>
<TextBlock TextDecorations="Underline" FontSize="24" Name="feedTitle" TextWrapping="Wrap" Margin="12,0,0,0" HorizontalAlignment="Left" Text="{Binding Title.Text, Converter={StaticResource RssTextTrimmer}}" >
<TextBlock.Foreground>
<SolidColorBrush Color="#FF159DDE"/>
</TextBlock.Foreground>
</TextBlock>
<TextBlock Name="feedSummary" TextWrapping="Wrap" Margin="12,0,0,0" Text="{Binding Summary.Text, Converter={StaticResource RssTextTrimmer}}" />
<TextBlock Name="feedPubDate" Foreground="{StaticResource PhoneSubtleBrush}" Margin="12,0,0,10" Text="{Binding PublishDate}" />
<TextBlock Name="feedContent" Text="{Binding Content}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
您解析图像URL的启发式方法很脆弱,您应该使用正则表达式:
using System.Text.RegularExpressions;
...
Image = Regex.Match(s.Summary.Text, @"<img's+src='(.+)''s+border='0''s+/>").Groups[1].Value,