【问题标题】:Using XML Reader to get specific information from an RSS feed into a winform使用 XML Reader 从 RSS 提要中获取特定信息到 winform
【发布时间】:2020-02-19 09:34:57
【问题描述】:

我是 C# 新手,所以我会尽力解释这一点。

我正在用 C# 创建一个简单的播客应用程序,并尝试使用 XML 阅读器来接收 RSS 提要,然后将该信息放入不同的 winforms。

我已经弄清楚如何将我想要的主要信息放入一个列表框中。 然而,我想不通的是,通过单击 listBox 中的列表项,从 RSS 提要中获取另一条信息(摘要)到 RichTextBox 中。

我为阅读 RSS 提要而开设的课程。

列表项

public class RSSreader
{
    public static List<Tuple<string, string>> rssRead(string url)
    {
        string subject = "";
        string summary = "";
        var x = "";
        var y = "";
        var count = 0;
        var list = new List<Tuple<string, string>>();
        try
        {



            XmlReader reader = XmlReader.Create(url);
            SyndicationFeed feed = SyndicationFeed.Load(reader);
            reader.Close();

            foreach (SyndicationItem item in feed.Items)
            {
                count++;
                subject = item.Title.Text;
                summary = item.Summary.Text;
                x += count + " " + subject + " ";
                list.Add(new Tuple<string, string>("Avsnitt " + count+ " " + subject, summary));

            }

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
        //Datahandler.SavePodFeed(list);
        return list ;
    }
}

public class RSSreader
{
    public static List<Tuple<string, string>> rssRead(string url)
    {
        string subject = "";
        string summary = "";
        var x = "";
        var y = "";
        var count = 0;
        var list = new List<Tuple<string, string>>();
        try
        {


            //string urlX = "http://feeds.soundcloud.com/users/soundcloud:users:298230954/sounds.rss";
            XmlReader reader = XmlReader.Create(url);
            SyndicationFeed feed = SyndicationFeed.Load(reader);
            reader.Close();

            foreach (SyndicationItem item in feed.Items)
            {
                count++;
                subject = item.Title.Text;
                summary = item.Summary.Text;
                x += count + " " + subject + " ";
                list.Add(new Tuple<string, string>("Avsnitt " + count+ " " + subject, summary));

            }

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }

        return list ;

    }
}

我用什么来填充列表框

private void button1_Click(object sender, EventArgs e)
{
    var list = RSSreader.rssRead(tbxURL.Text);
    foreach (Tuple<string, string> item in list)
    {
        listBox2.Items.Add(item.Item1);
    }
    listBox2.Items.Add(RSSreader.rssRead(tbxURL.Text));
}

我对使用 onclick 的摘要从 listBox 填充richTextBox 的看法。

private void listBox2_MouseClick(object sender, MouseEventArgs e)
{
    var list = RSSreader.rssRead(tbxURL.Text);
    foreach (Tuple<string, string> item in list)
    {
        if (item != listBox2.SelectedItem)
        {
            richTextBox1.Text = item.Item2.ToString();
        }
    }
}

我没有收到任何错误,但无论我单击列表中的哪个元素,它都只会使用相同的信息填充richTextBox。

【问题讨论】:

    标签: c# winforms xmlreader rss-reader


    【解决方案1】:

    这里有几点建议:

    • Make a class 用于存储来自 RSS 的每个元素的信息(例如,MyPodcastEntry.cs 具有 Index (count)、Subject、Summary 等属性)
    • 在您的 rssRead 中填充这些类并将它们添加到列表中
    • 将该列表添加到列表框中,而不是使用元组
    • Override ToString 在该类中调整它们在列表框中的显示方式

    这将帮助您保存和使用来自 RSS 的信息。每次单击列表框时都无需运行 rssRead。阅读 RSS 提要并将数据放入课堂后,您就可以随时访问此信息。

    现在在您的 MouseClick 事件处理程序中,您可以访问列表框的 SelectedItem,cast 它到您的类,然后访问您之前分配的属性,分配给富文本框文本,不需要 rssRead 或循环。

    可选的东西:

    用 C# 玩得开心!

    【讨论】:

      【解决方案2】:

      你有这个代码:

      private void listBox2_MouseClick(object sender, MouseEventArgs e)
      {
          var list = RSSreader.rssRead(tbxURL.Text);
          foreach (Tuple<string, string> item in list)
          {
              if (item != listBox2.SelectedItem)
              {
                  richTextBox1.Text = item.Item2.ToString();
              }
          }
      }
      

      您浏览所有项目时说:“如果这不是我要寻找的机器人,我会将它添加到 RichTextBox 中”。我想你的意思是:“如果这是我要找的机器人,我会把它添加到 RichTextBox 中。

      那就是:

      private void listBox2_MouseClick(object sender, MouseEventArgs e)
      {
          var list = RSSreader.rssRead(tbxURL.Text);
          foreach (Tuple<string, string> item in list)
          {
              if (item == listBox2.SelectedItem) // Notice the equality operator
              {
                  richTextBox1.Text = item.Item2.ToString();
              }
          }
      }
      

      我不知道这是否是您的拼写错误,但相等运算符是 ==,而不是 !=

      您的代码将始终显示列表中的最后一项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多