Я пытаюсь проанализировать потоки xml из разных источников, некоторые новостные ленты, соответствующие стандарту rss2.0, а другие - из разных источников, таких как twitter, facebook (что фактически дает мне возможность для rss2.0) и connectedIn.Все работало отлично, пока я не бросил фейсбук в микс.Я передал rss20 в качестве формата, поэтому он должен соответствовать тем же стандартам, что и обычный RSS-канал, и вписывается прямо в мой код, но он выдает ошибку An error occurred while parsing EntityName
и ссылается на эту строку ...
XPathNavigator xpn = new XPathDocument(Server.UrlDecode(XmlHelper.GetXmlFeedUrl(appSettings[x]))).CreateNavigator();
В моемЯ обнаружил, что для фида в Facebook не установлен заголовок ( исследование ).Но я не уверен, что это применимо или если есть совершенно лучший способ сделать это.Я думал о SyndicationFeed
, но так как твиттер не следит за атомом или rss, я не думаю, что это сработает.
Вот URL-адрес facebook ...
http://www.facebook.com/feeds/page.php?format=rss20%26id=6198772858
Здесьмой код ...
protected void Page_Load(object sender, EventArgs e)
{
XmlFeedItemPath xfip;
NameValueCollection appSettings = ConfigurationManager.AppSettings;
List<string> xmlFeeds = appSettings.AllKeys.Where(x => x.StartsWith("XmlFeed")).ToList();
string currentXmlFeedType;
if(!string.IsNullOrEmpty(xmlFeedType))
xmlFeeds.RemoveAll(s => !appSettings[s].Contains(XmlFeedType));
xmlFeeds.ForEach(x =>
{
currentXmlFeedType = XmlHelper.GetXmlFeedType(appSettings[x]);
xfip = XmlHelper.GetXmlFeedItemPath(currentXmlFeedType);
XPathNavigator xpn = new XPathDocument(Server.UrlDecode(XmlHelper.GetXmlFeedUrl(appSettings[x]))).CreateNavigator();
XmlNamespaceManager xmlnsm = XmlHelper.GetXmlNameSpaceManager(xpn);
XPathNodeIterator nodes = xpn.Select(xfip.IteratorPath, xmlnsm);
int i = 0;
foreach (XPathNavigator node in nodes)
{
XmlFeedItems.Add(new XmlFeedItem()
{
Title = string.IsNullOrEmpty(xfip.TitlePath) ? xfip.DefaultTitle : node.SelectSingleNode(xfip.TitlePath, xmlnsm).ToString(),
Link = string.IsNullOrEmpty(xfip.LinkPath) ? null : node.SelectSingleNode(xfip.LinkPath, xmlnsm).ToString(),
Teaser = string.IsNullOrEmpty(xfip.TeaserPath) ? null : XmlHelper.WrapUrlWithAnchorTags(node.SelectSingleNode(xfip.TeaserPath, xmlnsm).ToString()),
Source = string.IsNullOrEmpty(xfip.SourcePath) ? null : xpn.SelectSingleNode(xfip.SourcePath, xmlnsm).ToString(),
SortOrder = i,
XmlFeedType = currentXmlFeedType
});
i++;
}
});
rptRssFeed.DataSource = XmlFeedItems.OrderBy(x => x.SortOrder).Take(10);
rptRssFeed.DataBind();
}