我使用.NET.NET 2.0的RSS.NET。我嘗試過,也許,我得到0渠道爲以下幾點:RSS.NET無法解析feedburner提要
feed = RssFeed.Read("http://feeds.feedburner.com/punchfire?format=xml");
我注意,其他飼料這部作品如
我猜它必須是一個有效的XML文檔。你認爲我應該檢查我的應用程序代碼中的「.xml」嗎?還是有什麼辦法可以調整RSS.NET接受feedburner提要?
我使用.NET.NET 2.0的RSS.NET。我嘗試過,也許,我得到0渠道爲以下幾點:RSS.NET無法解析feedburner提要
feed = RssFeed.Read("http://feeds.feedburner.com/punchfire?format=xml");
我注意,其他飼料這部作品如
我猜它必須是一個有效的XML文檔。你認爲我應該檢查我的應用程序代碼中的「.xml」嗎?還是有什麼辦法可以調整RSS.NET接受feedburner提要?
你無法獲得任何通道節點的原因是,原子格式沒有任何通道節點。檢查以下
你的第二連桿是RSS饋送,其中包含信道節點像如下
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
<channel>
<title>Engadget</title>
<link>http://www.engadget.com</link>
.
.
.
在另一方面的原子進料不使用信道節點,正如您通過遵循上面的規範鏈接所瞭解的那樣。
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title type="text">dive into mark</title>
<subtitle type="html">
A <em>lot</em> of effort
went into making this effortless
</subtitle>
<updated>2005-07-31T12:29:29Z</updated>
<id>tag:example.org,2003:3</id>
<link rel="alternate" type="text/html"
hreflang="en" href="http://example.org/"/>
<link rel="self" type="application/atom+xml"
href="http://example.org/feed.atom"/>
<rights>Copyright (c) 2003, Mark Pilgrim</rights>
<generator uri="http://www.example.com/" version="1.0">
Example Toolkit
</generator>
<entry>
.
.
.
編輯:要檢查飼料格式
// url of the feed
string utlToload = @"http://feeds.feedburner.com/punchfire?format=xml"
// load feed
Argotic.Syndication.GenericSyndicationFeed feed =
Argotic.Syndication.GenericSyndicationFeed.Create(new Uri(urlToLoad));
// check what format is it
if (feed.Format.Equals(SyndicationContentFormat.Rss))
{
// yourlogic here
}
else if (feed.Format.Equals(SyndicationContentFormat.Atom))
{
// yourlogic here
}
else if (feed.Format.Equals(SyndicationContentFormat.NewsML))
{
// yourlogic here
}
希望它可以幫助
http://feeds.feedburner.com/punchfire?format=xml似乎是一個Atom飼料,而不是RSS。 rss.net知道如何處理?
使用.NET 3.5+它很容易解析Atom提要。 BTW Atom提要是我聽到的RSS的新標準。
public class RssFeedDO
{
public string RssFeedUrl { get; private set; }
/// <summary>
/// Build feed processor
/// </summary>
/// <param name="feedUrl">Atom or RSS url with http in front.</param>
public RssFeedDO(string feedUrl)
{
this.RssFeedUrl = feedUrl;
}
/// <summary>
/// Will try to get RSS data from url passed in constructor. Can do atom or rss
/// </summary>
/// <returns></returns>
public SyndicationFeed GetRSSData()
{
SyndicationFeed feed = null;
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
settings.CheckCharacters = true;
settings.CloseInput = true;
settings.IgnoreComments = true;
settings.IgnoreProcessingInstructions = true;
settings.DtdProcessing = DtdProcessing.Prohibit;
if (!string.IsNullOrEmpty(this.RssFeedUrl))
{
using (XmlReader reader = XmlReader.Create(this.RssFeedUrl, settings))
{
SyndicationFeedFormatter GenericFeedFormatter = null;
Atom10FeedFormatter atom = new Atom10FeedFormatter();
Rss20FeedFormatter rss = new Rss20FeedFormatter();
if (reader.ReadState == ReadState.Initial)
{
reader.MoveToContent();
}
// try either atom or rss reading
if (atom.CanRead(reader))
{
GenericFeedFormatter = atom;
}
if (rss.CanRead(reader))
{
GenericFeedFormatter = rss;
}
if (GenericFeedFormatter == null)
{
return null;
}
GenericFeedFormatter.ReadFrom(reader);
feed = GenericFeedFormatter.Feed;
}
}
return feed;
}
}
現在你可以一個對象的數據源指向上面的類,然後EVAL在你的ListView或radgrid控件的一些事情是這樣的:
<%# Eval("Title.Text") %>
與一對夫婦的FeedBurner測試飼料,它工作得很好。
我改進了JamesR的code有點,它現在返回一個成功的布爾值並接受一個ByRef syndicationfeed對象;
public static class FeedParser
{
public static bool Parse(string url, ref SyndicationFeed feed)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
settings.CheckCharacters = true;
settings.CloseInput = true;
settings.IgnoreComments = true;
settings.IgnoreProcessingInstructions = true;
settings.DtdProcessing = DtdProcessing.Prohibit;
if (string.IsNullOrEmpty(url)) return false;
using (XmlReader reader = XmlReader.Create(url, settings))
{
SyndicationFeedFormatter formatter = null;
Atom10FeedFormatter atom_formatter = new Atom10FeedFormatter();
Rss20FeedFormatter rss_formatter = new Rss20FeedFormatter();
if (reader.ReadState == ReadState.Initial) reader.MoveToContent();
if (atom_formatter.CanRead(reader)) formatter = atom_formatter;
if (rss_formatter.CanRead(reader)) formatter = rss_formatter;
if (formatter == null) return false;
formatter.ReadFrom(reader);
feed = formatter.Feed;
return true;
}
}
}
它可以用來像;
SyndicationFeed feed=null;
if(FeedParser.Parse(url,ref feed))
{
}
它的數字。謝謝您的幫助。我可以使用RSS.NET的原子分析器。你知道有什麼方法可以通過查看url來確定feed是rss還是atom? – Farooq 2010-02-04 13:22:30
它是最棘手的部分,不幸的是,直到你從源文件加載文件,它是不可能檢查它是什麼格式。(我不知道,但我們用這個) – 2010-02-04 18:22:07