如何使用 C# 在 RSS 提要的频道元素内插入元素 <item>..</item>?
How to insert an element <item>..</item> inside the channel element in a RSS feed using C#?
我正在寻找使用 C# 为网站创建 rss 提要的方法。我要尝试的是,一旦我单击一个按钮 ("Add Feed"),它就会创建一个节点元素,如下所示:
<item>
<title> some title...here </title>
<link> link to the article ...here </link>
<description> article's description ...here </description>
</item>
这必须是 元素的子元素。因此,到目前为止,对于我编写的代码,它将上述元素插入到 rss xml 文件中,但它是在 元素之外执行的,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Example Home Page</title>
<link>http://www.example.com</link>
<description>Educational Website...</description>
<image>
<url>http://www.example.com/images/logo.png</url>
<title>Example.com</title>
<link>http://www.example.com</link>
</image>
<category>Photography</category>
<language>en-us</language>
</channel>
<item>
<title> some title...here </title>
<link> link to the article ...here </link>
<description> article's description ...here </description>
</item>
</rss>
这是代码:
XmlDocument doc = new XmlDocument();
XmlNode item = doc.CreateElement("item");
XmlNode Title = doc.CreateElement("title");
Title.InnerText = TextBoxTitle.Text;
item.AppendChild(Title);
XmlNode link = doc.CreateElement("link");
link.InnerText = "http://www.example.com/" + DropDownListCategory.SelectedItem.Text + ".aspx?key=" + TextBoxLink.Text + ".txt";
item.AppendChild(link);
XmlNode description = doc.CreateElement("description");
description.InnerText = TextBoxDescription.Text;
item.AppendChild(description);
doc.DocumentElement.AppendChild(item);
doc.Save(Server.MapPath("~/rss.xml"));
我该怎么做?任何帮助或反馈将不胜感激。谢谢!!!
试试这个,如果我理解正确的话:
XmlDocument doc = new XmlDocument();
XmlNode rss = doc.CreateElement("rss");
XmlAttribute version = doc.CreateAttribute("version");
version.Value = "2.0";
rss.Attributes.Append(version);
XmlNode channel = doc.CreateElement("channel");
XmlNode item = doc.CreateElement("item");
XmlNode Title = doc.CreateElement("title");
Title.InnerText = "Title Text";
item.AppendChild(Title);
XmlNode link = doc.CreateElement("link");
link.InnerText = "http://www.example.com/.txt";
item.AppendChild(link);
XmlNode description = doc.CreateElement("description");
description.InnerText = "DESC";
item.AppendChild(description);
channel.AppendChild(item);
rss.AppendChild(channel);
doc.AppendChild(rss);
doc.Save(Server.MapPath("~/rss.xml"));
好的,现在我们知道文件已经保存在某个地方,试试这个:
var xmldoc = new XmlDocument();
xmldoc.Load(Server.MapPath("~/rss.xml"));
XmlNode channelNode = xmldoc.SelectSingleNode("descendant::channel");
if (channelNode != null)
{
XmlNode item = xmldoc.CreateElement("item");
XmlNode Title = xmldoc.CreateElement("title");
Title.InnerText = "Title Text";
item.AppendChild(Title);
XmlNode link = xmldoc.CreateElement("link");
link.InnerText = "http://www.example.com/.txt";
item.AppendChild(link);
XmlNode description = xmldoc.CreateElement("description");
description.InnerText = "DESC";
item.AppendChild(description);
channelNode.AppendChild(item);
}
doc.Save(Server.MapPath("~/rss.xml"));
.net 框架在 System.ServiceModel
中内置了对构建 RSS 提要的支持(您需要引用 System.ServiceModel.dll),最好用它来保证有效的 RSS xml,无论如何,最好还是自己构建 XML。延伸阅读 on MSDN.
例如..
// read in the existing rss xml
var rssFeedXml = XDocument.Load(@"c:\temp\rss3.xml"); // replace with server.mappath etc
var feed = SyndicationFeed.Load(rssFeedXml.CreateReader());
var items = new List<SyndicationItem>(feed.Items);
feed.Items = items;
// add the new item
items.Add(
new SyndicationItem(
"some title...here ",
"some description here",
new Uri("http://example.come")));
// write the xml back out
var rssFormatter = new Rss20FeedFormatter(feed, false);
XDocument output = new XDocument();
using (var xmlWriter = output.CreateWriter())
rssFormatter.WriteTo(xmlWriter);
output.Save(@"c:\temp\rss.xml");
我正在寻找使用 C# 为网站创建 rss 提要的方法。我要尝试的是,一旦我单击一个按钮 ("Add Feed"),它就会创建一个节点元素,如下所示:
<item>
<title> some title...here </title>
<link> link to the article ...here </link>
<description> article's description ...here </description>
</item>
这必须是
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Example Home Page</title>
<link>http://www.example.com</link>
<description>Educational Website...</description>
<image>
<url>http://www.example.com/images/logo.png</url>
<title>Example.com</title>
<link>http://www.example.com</link>
</image>
<category>Photography</category>
<language>en-us</language>
</channel>
<item>
<title> some title...here </title>
<link> link to the article ...here </link>
<description> article's description ...here </description>
</item>
</rss>
这是代码:
XmlDocument doc = new XmlDocument();
XmlNode item = doc.CreateElement("item");
XmlNode Title = doc.CreateElement("title");
Title.InnerText = TextBoxTitle.Text;
item.AppendChild(Title);
XmlNode link = doc.CreateElement("link");
link.InnerText = "http://www.example.com/" + DropDownListCategory.SelectedItem.Text + ".aspx?key=" + TextBoxLink.Text + ".txt";
item.AppendChild(link);
XmlNode description = doc.CreateElement("description");
description.InnerText = TextBoxDescription.Text;
item.AppendChild(description);
doc.DocumentElement.AppendChild(item);
doc.Save(Server.MapPath("~/rss.xml"));
我该怎么做?任何帮助或反馈将不胜感激。谢谢!!!
试试这个,如果我理解正确的话:
XmlDocument doc = new XmlDocument();
XmlNode rss = doc.CreateElement("rss");
XmlAttribute version = doc.CreateAttribute("version");
version.Value = "2.0";
rss.Attributes.Append(version);
XmlNode channel = doc.CreateElement("channel");
XmlNode item = doc.CreateElement("item");
XmlNode Title = doc.CreateElement("title");
Title.InnerText = "Title Text";
item.AppendChild(Title);
XmlNode link = doc.CreateElement("link");
link.InnerText = "http://www.example.com/.txt";
item.AppendChild(link);
XmlNode description = doc.CreateElement("description");
description.InnerText = "DESC";
item.AppendChild(description);
channel.AppendChild(item);
rss.AppendChild(channel);
doc.AppendChild(rss);
doc.Save(Server.MapPath("~/rss.xml"));
好的,现在我们知道文件已经保存在某个地方,试试这个:
var xmldoc = new XmlDocument();
xmldoc.Load(Server.MapPath("~/rss.xml"));
XmlNode channelNode = xmldoc.SelectSingleNode("descendant::channel");
if (channelNode != null)
{
XmlNode item = xmldoc.CreateElement("item");
XmlNode Title = xmldoc.CreateElement("title");
Title.InnerText = "Title Text";
item.AppendChild(Title);
XmlNode link = xmldoc.CreateElement("link");
link.InnerText = "http://www.example.com/.txt";
item.AppendChild(link);
XmlNode description = xmldoc.CreateElement("description");
description.InnerText = "DESC";
item.AppendChild(description);
channelNode.AppendChild(item);
}
doc.Save(Server.MapPath("~/rss.xml"));
.net 框架在 System.ServiceModel
中内置了对构建 RSS 提要的支持(您需要引用 System.ServiceModel.dll),最好用它来保证有效的 RSS xml,无论如何,最好还是自己构建 XML。延伸阅读 on MSDN.
例如..
// read in the existing rss xml
var rssFeedXml = XDocument.Load(@"c:\temp\rss3.xml"); // replace with server.mappath etc
var feed = SyndicationFeed.Load(rssFeedXml.CreateReader());
var items = new List<SyndicationItem>(feed.Items);
feed.Items = items;
// add the new item
items.Add(
new SyndicationItem(
"some title...here ",
"some description here",
new Uri("http://example.come")));
// write the xml back out
var rssFormatter = new Rss20FeedFormatter(feed, false);
XDocument output = new XDocument();
using (var xmlWriter = output.CreateWriter())
rssFormatter.WriteTo(xmlWriter);
output.Save(@"c:\temp\rss.xml");