C# 使用XML阅读器将特定信息从RSS提要获取到winform中

C# 使用XML阅读器将特定信息从RSS提要获取到winform中,c#,winforms,xmlreader,rss-reader,C#,Winforms,Xmlreader,Rss Reader,我是C#的新手,所以我会尽力解释这一点 我正在用C#创建一个简单的播客应用程序,并尝试使用XML阅读器接收RSS提要,然后将这些信息放入不同的winforms中 我已经想出了如何把我想要的主要信息放到列表框中。 然而,我无法理解的是,通过单击列表框中的列表项,从RSS提要中获取另一条信息(摘要)到richTextBox中 我制作的阅读RSS提要的课程 列表项 public class RSSreader { public static List<Tuple<string, s

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

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

我已经想出了如何把我想要的主要信息放到列表框中。 然而,我无法理解的是,通过单击列表框中的列表项,从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 ;

    }
}
公共类RSSreader
{
公共静态列表rssRead(字符串url)
{
字符串主语=”;
字符串摘要=”;
var x=“”;
变量y=“”;
var计数=0;
var list=新列表();
尝试
{
XmlReader=XmlReader.Create(url);
SyndicationFeed=SyndicationFeed.Load(读卡器);
reader.Close();
foreach(feed.Items中的SyndicationItem项目)
{
计数++;
主题=item.Title.Text;
summary=item.summary.Text;
x+=计数+“”+主题+“”;
添加(新元组(“Avsnitt”+计数+“”+主题,摘要));
}
}
捕获(例外情况除外)
{
控制台写入线(ex);
}
//SavePodFeed(列表);
退货清单;
}
}
公共类RSSreader
{
公共静态列表rssRead(字符串url)
{
字符串主语=”;
字符串摘要=”;
var x=“”;
变量y=“”;
var计数=0;
var list=新列表();
尝试
{
//字符串urlX=”http://feeds.soundcloud.com/users/soundcloud:users:298230954/sounds.rss";
XmlReader=XmlReader.Create(url);
SyndicationFeed=SyndicationFeed.Load(读卡器);
reader.Close();
foreach(feed.Items中的SyndicationItem项目)
{
计数++;
主题=item.Title.Text;
summary=item.summary.Text;
x+=计数+“”+主题+“”;
添加(新元组(“Avsnitt”+计数+“”+主题,摘要));
}
}
捕获(例外情况除外)
{
控制台写入线(ex);
}
退货清单;
}
}
我用什么填充列表框

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));
}
private void按钮1\u单击(对象发送者,事件参数e)
{
var list=RSSreader.rssRead(tbxURL.Text);
foreach(列表中的元组项)
{
listBox2.Items.Add(item.Item1);
}
listBox2.Items.Add(RSSreader.rssRead(tbxURL.Text));
}
我的观点是使用摘要onclick从列表框填充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();
        }
    }
}
private void listBox2\u鼠标单击(对象发送者,鼠标指针)
{
var list=RSSreader.rssRead(tbxURL.Text);
foreach(列表中的元组项)
{
如果(项!=列表框2.选择编辑项)
{
richTextBox1.Text=item.Item2.ToString();
}
}
}

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

以下是一些指针:

  • 存储RSS中每个元素的信息(例如,MyPodcastEntry.cs和属性索引(计数)、主题、摘要等)
  • 在rssRead中填充这些类并将它们添加到列表中
  • 将该列表添加到列表框中,而不是使用元组
  • 在该类中调整它们在列表框中的显示方式
这将帮助您保存和使用RSS中的信息。无需每次单击列表框时都运行rssRead。一旦您阅读了RSS提要并将数据放入类中,您就可以随时访问这些信息

现在,在MouseClick事件处理程序中,您可以访问listbox的SelectedItem,将其添加到您的类中,然后访问以前分配给richtextbox文本的属性,无需rssRead或循环

可选材料:

  • 使用SelectedIndexChanged代替MouseClick事件
  • 有一个可用的,无需制作您自己的nvm,您正在使用辛迪加,这很好:)
  • 干净代码
    • 未使用的变量x,y
    • 而不是在顶端
    • 更好的是,因为它们的值已经存储在item.Title.Text和item.Summary.Text中
玩得开心

您有以下代码:

private void listBox2\u鼠标单击(对象发送者,鼠标指针)
{
var list=RSSreader.rssRead(tbxURL.Text);
foreach(列表中的元组项)
{
如果(项!=列表框2.选择编辑项)
{
richTextBox1.Text=item.Item2.ToString();
}
}
}
你浏览了所有的条目,说:“如果这不是我要找的机器人,我会把它添加到RichTextBox中。”。我想你的意思是:“如果这是我要找的机器人,我会把它添加到RichTextBox中

这将是:

private void listBox2\u鼠标单击(对象发送者,鼠标指针)
{
var list=RSSreader.rssRead(tbxURL.Text);
foreach(列表中的元组项)
{
if(item==listBox2.SelectedItem)//注意相等运算符
{
richTextBox1.Text=item.Item2.ToString();
}
}
}
我不知道这是否是您的输入错误,但相等运算符是
=
,而不是
!=

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