Лента YouTube в списке ошибок - PullRequest
2 голосов
/ 05 января 2012

Я пытался использовать этот код для вставки каналов в списке, но с каналами 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); 
}

Спасибо за ваши ответы

1 Ответ

1 голос
/ 05 января 2012

Пространства имен имеют значение при выборе узлов в документе XML.Вы должны добавить namespacemanger и явно указать, какой элемент вы хотите.Кроме того, выбор атрибутов (для ссылки) отличается от просто внутреннего текста элемента.

     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 с пространственным менеджером имен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...