【问题标题】:Feed YouTube in listbox Error在列表框中输入 YouTube 错误
【发布时间】:2012-01-05 19:05:52
【问题描述】:

我已尝试使用此代码在列表框中插入提要,但使用 youtube 提要它不起作用。对不起,我对xml不太了解

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

相反,这是可行的

//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); 
}

感谢您的回答

【问题讨论】:

  • 这样你就有了可以工作的代码。你有什么问题?
  • 该代码适用于我的网站,不适用于 youtube 提要!
  • 仅供参考,还有一个 SyndicationFeed 类。它可以很好地处理大多数常见提要(facebook 除外)的 Atom 和 RSS,而无需摆弄命名空间和 xmlNode 查询。这一切都在后面的代码中完成

标签: c# xml winforms visual-studio-2010


【解决方案1】:

命名空间在选择 xml 文档中的节点时发挥作用。您必须添加一个命名空间管理器并明确指出您想要的元素。此外,选择属性(用于链接)与元素的内部文本不同。

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

SelectNodes with a namespacemanager

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2015-12-17
    • 2018-11-08
    • 2021-09-26
    相关资源
    最近更新 更多