Разбор 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);
Другие вопросы по тегам