2010-12-03 14 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

関連する問題