Разбор XML из API YouTube в C#
Я проанализировал некоторые XML, которые возвращает API YouTube. XML, который я пытаюсь разобрать, можно найти по URL-адресу, например, http://gdata.youtube.com/feeds/api/videos?v=2&q=stackru
Я пытаюсь получить узлы yt:accessControl, и я не уверен, как это сделать. Я пытался с SelectNodes, но получил пустой результат.
1 ответ
Для YouTube, я думаю, вам это не нужно - в Google есть API-оболочка специально для.NET: https://developers.google.com/youtube/2.0/developers_guide_dotnet
Но если вы все еще хотите сделать это вручную, методы LINQ to XML, такие как Descendants и Element, принимают XName в качестве аргумента. Для вас происходит автоматическое преобразование строки в XName. Вы можете исправить это, добавив XNamespace перед строками в ваших вызовах Descendants и Element. Остерегайтесь, потому что у вас есть 2 разных пространства имен на работе.
XNamespace ns = "http://gdata.youtube.com/schemas/2007";
var xElements = XElement.Parse(File.ReadAllText(@"c:\test\youtube.xml"))
.Descendants(ns + "accessControl");
Без Linq это выглядело бы примерно так:
var xdoc = new XmlDocument();
xdoc.Load(@"c:\test\youtube.xml");
var namespaceManager = new XmlNamespaceManager(xdoc.NameTable);
namespaceManager.AddNamespace("yt", "http://gdata.youtube.com/schemas/2007");
var xmlNodeList = xdoc.SelectNodes("//yt:accessControl", namespaceManager);