C#XmlTextReader和DataSet导致重复名称异常

时间:2010-12-03 20:51:40

标签: c# xml

我正在尝试阅读标准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(),无论多余,似乎都绕过了这个问题。

1 个答案:

答案 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);
        }