如何判断我的RSS阅读器是否由于RSS源错误或其他原因而无法正常工作?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判断我的RSS阅读器是否由于RSS源错误或其他原因而无法正常工作?相关的知识,希望对你有一定的参考价值。

我在从RSS阅读器显示XML数据时遇到了麻烦,我尝试了许多来自不同来源的不同RSS源,但我无法显示任何内容。

我正在尝试获取俄罗斯新闻RSS Feed,我也使用了BBC新闻Feed,我无法获取任何数据,我无法确定它是RSS Feed的结尾还是我的结尾(代码,或来自Go方法的东西)。我已经使用了一些示例RSS提要代码,它正确地在我的计算机上工作,所以我只是尝试了不同的读者,甚至根本没有提出任何东西。

这是我的NewsFeedPage(XAML):

 <Grid>
        <NavigationView x:Name="NavView"
                        ItemInvoked="NavView_ItemInvoked"
                        SelectionChanged="NavView_SelectionChanged"
                        Loaded="NavView_Loaded"
                        Canvas.ZIndex="0" Background="White" Margin="0,0,222,10" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
            <NavigationView.MenuItems>
                <NavigationViewItem x:Name="HomeNav" Content="Home" Tag="Home" Icon="Home"/>
                <NavigationViewItemSeparator Height="100"></NavigationViewItemSeparator>
                <NavigationViewItemHeader Content="Separate Pages"/>
                <NavigationViewItem x:Name="AttractionsNav" Content="Attractions" Tag="Attractions" Icon="World"/>
                <NavigationViewItem x:Name="PlacestoEatNav" Content="Places to Eat" Tag="PlacesToEat" Icon="Like"/>
                <NavigationViewItem x:Name="MapNav" Content="Map" Tag="Map" Icon="Map"/>
                <NavigationViewItem x:Name="PhotosNav" Content="Photos" Tag="Photos" Icon="Camera"/>
                <NavigationViewItem x:Name="NewsNav" Content="News" Tag="News" Icon="Globe"/>
                <NavigationViewItem x:Name="WeatherNav" Content="Weather" Tag="weather" Icon="CalendarWeek"/>
            </NavigationView.MenuItems>


            <Frame x:Name="ContentFrame" Margin="24,24,0,24" Width="1916" VerticalAlignment="Stretch">
                <Frame.ContentTransitions>
                    <TransitionCollection>
                        <NavigationThemeTransition/>
                    </TransitionCollection>
                </Frame.ContentTransitions>
            </Frame>

        </NavigationView>

        <Grid HorizontalAlignment="Stretch" Margin="348,0,0,0" VerticalAlignment="Stretch">
            <Grid.ColumnDefinitions>
                <ColumnDefinition MaxWidth="1000"/>
                <ColumnDefinition MinWidth="500"/>
            </Grid.ColumnDefinitions>

            <Grid Grid.Column="0" Padding="12,12,12,0" KeyDown="Go_KeyDown">
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>

                <TextBox Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Top" Foreground="Firebrick" Text="BBC News" FontSize="28" Background="White" IsReadOnly="True"/>
                <TextBox Grid.Row="1" Name="value" VerticalAlignment="Center" TextWrapping="Wrap" Text="Press ENTER key to see latest new stories below. Click on a blue web address to see story details on the right." IsReadOnly="True"/>

                <ScrollViewer Grid.Row="2" Margin="20" BorderThickness="0">
                    <ItemsControl Name="display">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Background="GhostWhite">
                                    <TextBlock FontSize="24" TextWrapping="Wrap" Text="{Binding Path=Title.Text}" Foreground="Firebrick" Margin="2,2,10,2"/>
                                    <TextBlock Text="{Binding Path=PublishedDate}" Foreground="Firebrick"/>
                                    <TextBlock Text="{Binding Path=Summary.Text}" TextWrapping="WrapWholeWords" Foreground="Black"/>
                                    <TextBlock x:Name="address" Tapped="Address_OnTapped" Text="{Binding Path=Links[0].Uri}" Foreground="Blue">
                                    </TextBlock>
                                    <TextBlock></TextBlock>
                                    <Rectangle x:Name="BorderBottom" Height="4" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Fill="DarkSalmon"/>
                                </StackPanel>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>


                    </ItemsControl>
                </ScrollViewer>

            </Grid>

            <Grid Grid.Column="1">
                <WebView x:Name="ArticleWebView"/>
            </Grid>

        </Grid>


    </Grid>
</Page>

这是我的NewsFeed.cs文件:

public sealed partial class NewsFeedPage : Page
    {
        public NewsFeedPage()
        {
            this.InitializeComponent();
        }

        public NewsFeed MyFeed = new NewsFeed();

        public string address = "http://feeds.bbci.co.uk/news/rss.xml";



        private void Address_OnTapped(object sender, TappedRoutedEventArgs e)
        {
            var tblk = sender as TextBlock;
            Uri websiteuri = new Uri(tblk.Text);
            ArticleWebView.Navigate(websiteuri);
        }

        private void Go_KeyDown(object sender, KeyRoutedEventArgs e)
        {
            MyFeed.Go(ref display, address, e);
        }

        private void NavView_Loaded(object sender, RoutedEventArgs e)
        {

        }


        private void NavView_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
        {
            if (args.IsSettingsInvoked)
            {
                Frame.Navigate(typeof(SettingsPage));
            }

这是我的NewsFeed.cs文件(支持类):

namespace SEMESTER_PROJECT
{
    public class NewsFeed
    {
        private async void Load(ItemsControl list, Uri uri)
        {
            SyndicationClient client = new SyndicationClient();

            SyndicationFeed feed = await client.RetrieveFeedAsync(uri);

            if (feed != null)
            {
                foreach (SyndicationItem item in feed.Items)
                {
                    list.Items.Add(item);
                }
            }
        }

        public void Go(ref ItemsControl list, string value, KeyRoutedEventArgs args)
        {
            if (args.Key == Windows.System.VirtualKey.CapitalLock)
            {
                try
                {
                    Load(list, new Uri(value));

                }
                catch
                {
                    Console.Write("Yeah it didn't work for some reason.");
                }
                list.Focus(FocusState.Keyboard);
            }
        }

    }

}

我尝试使用不同的键来启动Go方法,但是Enter键使NavigationView变得越来越小,而Tab键在NavigationView中的选项之间移动。我不太确定关键是问题,但这就是我认为可能的问题。

答案

如果您的意思是按Enter键时无法获取任何数据,则问题出在此处:

if (args.Key == Windows.System.VirtualKey.CapitalLock)

如果要调用Go方法并按Enter键进入Load方法代码块。您需要更改代码:

if (args.Key == Windows.System.VirtualKey.Enter)

我尝试使用不同的键来启动Go方法,但是Enter键使NavigationView变得越来越小,而Tab键在NavigationView中的选项之间移动。我不太确定关键是问题,但这就是我认为可能的问题。

这是设计的。如果当前页面上没有聚焦元素,它将自动找到下一个可聚焦元素,并在按Enter键时使其聚焦。您可以通过programmatic手动关注某个元素来解决此问题。

例如,您可以在加载页面时关注ItemsControl

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    display.Focus(FocusState.Programmatic);
}

以上是关于如何判断我的RSS阅读器是否由于RSS源错误或其他原因而无法正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何将RSS源视为格式化XML?

无法使用jsoup获取RSS提要链接

如何使用自定义XSLT在浏览器中显示Atom / RSS源?

过滤RSS源

WordPress基础:订阅源rss的使用

MailChimp:如何将条件逻辑与RSS源一起使用