2010-12-03 4 views
0

표준 CNN 뉴스 피드를 테이블에 넣으려고하는데 "링크가 중복되었습니다."라는 예외가 있습니다. 라인에 : 중복 이름 예외를 일으키는 C# XmlTextReader 및 DataSet

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

당신은 "새로운 XmlTextReader는"을 사용해서는 안합니다. .NET 2.0 이후로 더 이상 사용되지 않습니다. 대신에'XmlReader.Create'를 사용하십시오. –

+0

John Saunders : XmlReader에도 동일한 오류가 나타납니다. – Muflix

답변

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); 
     } 
+0

아, xPath 물건 덕분에, 나는 .NET에도 존재한다는 사실을 잊어 버렸다. XmlSchema를 아직 읽지 않았습니다. 또한 그 코드를 작성하는 방법을 궁금해하는 사람들을 위해 : using System.Xml.Linq; XDocument doc = XDocument.Load ("http://rss.cnn.com/rss/cnn_topstories.rss"); foreach (XElement 노드가 (IEnumerable ) doc.XPathEvaluate ("// item")) – Dexter