2012-01-05 8 views
2

私はこのコードをリストボックスのフィードに使用しようとしましたが、YouTubeフィードでは機能しません。申し訳ありませんが、私はFeedbox in listboxエラー

XmlDocument RSSXml = new XmlDocument(); 
RSSXml.Load("http://gdata.youtube.com/feeds/api/users/google/uploads"); 

XmlNodeList RSSNodeList = RSSXml.SelectNodes("feed"); 
XmlNode RSSDesc = RSSXml.SelectSingleNode("feed"); 

foreach (XmlNode RSSNode in RSSNodeList) 
{ 
    XmlNode RSSSubNode; 
    RSSSubNode = RSSNode.SelectSingleNode("title"); 
    string title = RSSSubNode != null ? RSSSubNode.InnerText : ""; 
    RSSSubNode = RSSNode.SelectSingleNode("link"); 
    string link = RSSSubNode != null ? RSSSubNode.InnerText : ""; 
    listBox1.Items.Add(title);     
} 

代わりに、XMLについてあまり知らない、これは

+0

SelectNodes with a namespacemanagerを参照してください。あなたの質問は何ですか? –

+0

私のウェブサイトのコードはYouTubeのフィードでは機能しません! – Fulcrum

+1

純粋にFYIにはSyndicationFeedクラスもあります。これは、ネームスペースとxmlNodeのクエリに挑戦することなく、最も一般的なフィード(Facebookを除く)のAtomとRSSをうまく処理します。それはコードの中ですべて – tazyDevel

答えて

1

名前空間は、XML文書内のノードを選択するメイザーを行い、あなたの答えを

//Fetch the subscribed RSS Feed 
XmlDocument RSSXml = new XmlDocument(); 
RSSXml.Load("mywebsite/feed/"); 

XmlNodeList RSSNodeList = RSSXml.SelectNodes("rss/channel/item"); 
XmlNode RSSDesc = RSSXml.SelectSingleNode("rss/channel/title"); 

foreach (XmlNode RSSNode in RSSNodeList) 
{ 
    XmlNode RSSSubNode; 
    RSSSubNode = RSSNode.SelectSingleNode("title"); 
    string title = RSSSubNode != null ? RSSSubNode.InnerText : ""; 
    RSSSubNode = RSSNode.SelectSingleNode("link"); 
    string link = RSSSubNode != null ? RSSSubNode.InnerText : "";          
    listBox1.Items.Add(title); 
    listBox2.Items.Add(link); 
} 

おかげで動作します。 namespacemangerを追加し、必要な要素を明示的に指定する必要があります。また、(リンクの)属性を選択することは、要素のinnertextとは異なります。

 XmlDocument RSSXml = new XmlDocument(); 
    RSSXml.Load("http://gdata.youtube.com/feeds/api/users/google/uploads"); 

    XmlNamespaceManager nsmgr = new XmlNamespaceManager(RSSXml.NameTable); 
    nsmgr.AddNamespace("tns", "http://www.w3.org/2005/Atom"); 

    XmlNodeList RSSNodeList = RSSXml.SelectNodes("//tns:entry", nsmgr); 
    XmlNode RSSDesc = RSSXml.SelectSingleNode("tns:feed",nsmgr); 

    foreach (XmlNode RSSNode in RSSNodeList) {  
     XmlNode RSSSubNode;  
     RSSSubNode = RSSNode.SelectSingleNode("tns:title", nsmgr);  
     string title = RSSSubNode != null ? RSSSubNode.InnerText : "";  
     RSSSubNode = RSSNode.SelectSingleNode("tns:link/@href",nsmgr);  
     string link = RSSSubNode != null ? RSSSubNode.InnerText : "";  

     Console.WriteLine("{0} {1}",title, link); 
    } 

だから、あなたが動作するコードを持っている

+0

の後ろにありがとう! – Fulcrum