我正在尝试阅读标准CNN新闻Feed以放入表格,它告诉我“重复'链接'列例外。”在线:
cnnds.ReadXml(CNNfeed);
这是整个代码,当它只是忽略重复列或使用最后一列时,它会停止代码并抛出错误。
XmlTextReader CNNfeed = new XmlTextReader("http://rss.cnn.com/rss/cnn_topstories.rss");
DataSet cnnds = new DataSet("CNN");
cnnds.ReadXml(CNNfeed, XmlReadMode.Auto); // read the XML feed
DataTable CNNNewsFeedTable = new DataTable("CNNNewsFeed");
如何解决此问题?我已经尝试了所有的东西,让这个工作的唯一方法是正确地不使用CNN饲料。
我刚刚更改了XmlReadMode.ReadSchema,它通过了这部分,但后来它说cnnds.Tables [1]是一个超出范围的索引。就好像它是一个空的XML。
在没有所有这些例外和问题的情况下,是否有更简单的方法从其他网站阅读RSS源?
编辑:似乎在它周围添加一个try {} catch(),无论多余,似乎都绕过了这个问题。
答案 0 :(得分:2)
如果要读取数据集中的xml,则需要xml-schema(否则ReadXml()无法区分不同的命名空间)。
使用:
var CNNfeed = new XmlTextReader("http://rss.cnn.com/rss/cnn_topstories.rss");
var cnnds = new DataSet("CNN");
cnnds.ReadXmlSchema("http://www.thearchitect.co.uk/schemas/rss-2_0.xsd"); // read the rss schema
cnnds.ReadXml(CNNfeed); // read the XML feed
但我认为你最好使用xpath来找到你需要的信息:
var doc = XDocument.Load("http://rss.cnn.com/rss/cnn_topstories.rss");
foreach (XElement node in (IEnumerable) doc.XPathEvaluate("//item"))
{
Console.WriteLine(node.XPathSelectElement("title").Value);
}