使用 XML Reader 从 RSS 提要获取特定信息到 winform
Using XML Reader to get specific information from an RSS feed into a winform
我是 C# 的新手,所以我会尽力解释这一点。
我正在用 C# 创建一个简单的播客应用程序并尝试使用 XML-reader 接收 RSS 提要,然后将该信息放入不同的 winforms。
我已经弄清楚如何将我想要的主要信息放入列表框中。
然而,我无法弄清楚的是,通过单击列表框中的列表项,从 RSS 提要中获取另一条信息(摘要)到 richTextBox 中。
我做的class阅读RSS feed。
列表项
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。
这里有几点建议:
- Make a class 存储每个元素的 RSS 信息的位置(例如 MyPodcastEntry.cs 具有索引(计数)、主题、摘要等属性)
- 将这些 class 填充到您的 rssRead 中并将它们添加到列表中
- 将该列表添加到列表框中,而不是使用 Tuple<>
- Override ToString 其中 class 调整它们在列表框中的显示方式
这将帮助您保存和使用来自 RSS 的信息。每次单击列表框时都不需要 运行 rssRead。阅读 RSS 提要并将数据放入 class 后,您就可以随时访问此信息。
现在,在您的 MouseClick 事件处理程序中,您可以访问列表框的 SelectedItem,cast 它到您的 class,然后访问您之前分配的属性,以分配给 richtextbox 文本,不需要 rssRead 或循环。
可选内容:
- 使用 SelectedIndexChanged 代替 MouseClick 事件
有 bunch of rss feed reader nugets 可用,无需制作您自己的 nvm 您正在使用 Syndication,这很好 :)
- 干净的代码
- 未使用的变量 x, y
- Define variables subject and summary in the foreach 而不是顶部
- 更好的是,don't use subject and summary variables at all 因为它们的值已经存储在 item.Title.Text 和 item.Summary.Text
中
玩得开心 C#!
你有这个代码:
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();
}
}
}
您 运行 通过所有项目说:"If this is not the droid I'm looking for, I will add it to the 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();
}
}
}
不知道是不是你打错了,等号是==
,不是!=
.
您的代码将始终显示列表中的最后一项。
我是 C# 的新手,所以我会尽力解释这一点。
我正在用 C# 创建一个简单的播客应用程序并尝试使用 XML-reader 接收 RSS 提要,然后将该信息放入不同的 winforms。
我已经弄清楚如何将我想要的主要信息放入列表框中。 然而,我无法弄清楚的是,通过单击列表框中的列表项,从 RSS 提要中获取另一条信息(摘要)到 richTextBox 中。
我做的class阅读RSS feed。
列表项
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。
这里有几点建议:
- Make a class 存储每个元素的 RSS 信息的位置(例如 MyPodcastEntry.cs 具有索引(计数)、主题、摘要等属性)
- 将这些 class 填充到您的 rssRead 中并将它们添加到列表中
- 将该列表添加到列表框中,而不是使用 Tuple<>
- Override ToString 其中 class 调整它们在列表框中的显示方式
这将帮助您保存和使用来自 RSS 的信息。每次单击列表框时都不需要 运行 rssRead。阅读 RSS 提要并将数据放入 class 后,您就可以随时访问此信息。
现在,在您的 MouseClick 事件处理程序中,您可以访问列表框的 SelectedItem,cast 它到您的 class,然后访问您之前分配的属性,以分配给 richtextbox 文本,不需要 rssRead 或循环。
可选内容:
- 使用 SelectedIndexChanged 代替 MouseClick 事件
有 bunch of rss feed reader nugets 可用,无需制作您自己的nvm 您正在使用 Syndication,这很好 :)- 干净的代码
- 未使用的变量 x, y
- Define variables subject and summary in the foreach 而不是顶部
- 更好的是,don't use subject and summary variables at all 因为它们的值已经存储在 item.Title.Text 和 item.Summary.Text 中
玩得开心 C#!
你有这个代码:
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();
}
}
}
您 运行 通过所有项目说:"If this is not the droid I'm looking for, I will add it to the 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();
}
}
}
不知道是不是你打错了,等号是==
,不是!=
.
您的代码将始终显示列表中的最后一项。