C# 在C中阅读Facebook提要#

C# 在C中阅读Facebook提要#,c#,xml,facebook,C#,Xml,Facebook,我想从Facebook页面读取XML流。当我尝试运行下面的代码时,我得到一个错误“分析EntityName时出错。第10行,位置53。”。为什么以及如何解决它 class Program { static void Main(string[] args) { var feed = RssManager.ReadFeed("https://www.facebook.com/feeds/page.php?id=145493382141206&format=rs

我想从Facebook页面读取XML流。当我尝试运行下面的代码时,我得到一个错误“分析EntityName时出错。第10行,位置53。”。为什么以及如何解决它

class Program
{
    static void Main(string[] args)
    {
        var feed = RssManager.ReadFeed("https://www.facebook.com/feeds/page.php?id=145493382141206&format=rss20");
        foreach (var item in feed)
        {
            Console.WriteLine("***********************************************");
            Console.WriteLine("Title:" + item.title);
            Console.WriteLine("Link:" + item.link);
            Console.WriteLine("Description:" + item.description);
            Console.WriteLine("Language:" + item.language);
            Console.WriteLine("Publish Date:" + item.pubdate);
            Console.WriteLine("***********************************************");
        }
        Console.ReadLine();
    }
}

public class RssFeedItem
{
    public string title { get; set; }
    public string link { get; set; }
    public string description { get; set; }
    public string language { get; set; }
    public string pubdate { get; set; }
}

public static class RssManager
{
    public static List<RssFeedItem> ReadFeed(string url)
    {
        List<RssFeedItem> rssItems = new List<RssFeedItem>();
        HttpWebRequest rssFeed = (HttpWebRequest)WebRequest.Create(url);
        using (DataSet rssData = new DataSet())
        {
            var response = rssFeed.GetResponse();
            var data = response.GetResponseStream();
            rssData.ReadXml(data);
            foreach (DataRow datarow in rssData.Tables["item"].Rows)
            {
                rssItems.Add(new RssFeedItem
                {
                    description = Convert.ToString(datarow["description"]),
                    language = Convert.ToString(datarow["language"]),
                    link = Convert.ToString(datarow["link"]),
                    pubdate = Convert.ToString(datarow["pubdate"]),
                    title = Convert.ToString(datarow["title"])
                });
            }
        }
        return rssItems;
    }
}
类程序
{
静态void Main(字符串[]参数)
{
var feed=RssManager.ReadFeed(“https://www.facebook.com/feeds/page.php?id=145493382141206&format=rss20");
foreach(提要中的变量项)
{
Console.WriteLine(“****************************************************************”);
Console.WriteLine(“标题:+项目标题”);
控制台.WriteLine(“链接:+item.Link”);
Console.WriteLine(“说明:“+项目说明”);
Console.WriteLine(“语言:+item.Language”);
Console.WriteLine(“发布日期:+item.pubdate”);
Console.WriteLine(“****************************************************************”);
}
Console.ReadLine();
}
}
公共类RssFeedItem
{
公共字符串标题{get;set;}
公共字符串链接{get;set;}
公共字符串说明{get;set;}
公共字符串语言{get;set;}
公共字符串pubdate{get;set;}
}
公共静态类RssManager
{
公共静态列表ReadFeed(字符串url)
{
List rssItems=新列表();
HttpWebRequest rssFeed=(HttpWebRequest)WebRequest.Create(url);
使用(DataSet rssData=new DataSet())
{
var response=rssFeed.GetResponse();
var data=response.GetResponseStream();
ReadXml(数据);
foreach(rssData.Tables[“item”].Rows中的DataRow DataRow)
{
添加(新的RssFeedItem)
{
description=Convert.ToString(数据行[“description”]),
language=Convert.ToString(数据行[“语言”]),
link=Convert.ToString(数据行[“链接]),
pubdate=Convert.ToString(数据行[“pubdate”]),
title=Convert.ToString(数据行[“title”])
});
}
}
返回rssItems;
}
}

是否尝试了“pubDate”而不是“pubDate”?

是否尝试了“pubDate”而不是“pubDate”?

下面的代码段返回了一个关于不支持的浏览器的错误页面

HttpWebRequest rssFeed = (HttpWebRequest)WebRequest.Create("https://www.facebook.com/feeds/page.php?id=145493382141206&format=rss20");
Console.WriteLine(new StreamReader(rssFeed.GetResponse().GetResponseStream()).ReadToEnd());
如果您添加以下行,它将正常工作:

rssFeed.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)";
---编辑---


上述解决方案将使您能够传递在
rssData.ReadXml(data)
上抛出的XML异常。但是您的代码在解析RSS时仍然存在问题(我注释掉了
language=Convert.ToString(datarow[“language”])

下面的代码片段返回了一个关于不支持的浏览器的错误页面

HttpWebRequest rssFeed = (HttpWebRequest)WebRequest.Create("https://www.facebook.com/feeds/page.php?id=145493382141206&format=rss20");
Console.WriteLine(new StreamReader(rssFeed.GetResponse().GetResponseStream()).ReadToEnd());
如果您添加以下行,它将正常工作:

rssFeed.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)";
---编辑---


上述解决方案将使您能够传递在
rssData.ReadXml(data)
上抛出的XML异常。但是您的代码在解析RSS时仍然存在问题(我注释掉了
language=Convert.ToString(datarow[“language”])
)。

使用数据集解析RSS不是一个很好的方法(不是每个XML模式都可以解释为数据集)。我会尝试使用其他东西:请参见示例当我尝试使用XDocument时,我会遇到相同的错误。“分析EntityName时出错。第10行,位置53。”@Ronsplitter您查看了返回的字符串吗?它可能是一个html页面吗?不,它是xml。您可以在Yes中看到该文件,它在浏览器中返回xml,但在使用
WebClient时返回html页面。DownloadString
(抱怨不支持浏览器)使用数据集解析RSS不是一种很好的方法(不是每个xml模式都可以解释为数据集)。我会尝试使用其他东西:请参见示例当我尝试使用XDocument时,我会遇到相同的错误。“分析EntityName时出错。第10行,位置53。”@Ronsplitter您查看了返回的字符串吗?它可能是一个html页面吗?不,它是xml。您可以在“是”处看到该文件,它在浏览器中返回xml,但在使用
WebClient.DownloadString
时返回html页面(抱怨浏览器不受支持)