Разобрать каналы YouTube с linq
Я хочу, чтобы разобрать каналы атома канала YouTube. Вот ссылка на этот канал rss.
http://gdata.youtube.com/feeds/api/users/cokestudio/uploads?orderby=updated
List<YTFeeds> lstYT = new List<YTFeeds>();
XDocument xDocumentYT = XDocument.Load(Server.MapPath("XMLFile.xml"));
XNamespace xmlns = "http://www.w3.org/2005/Atom";
lstYT.AddRange((from entry in xDocumentYT.Descendants(xmlns + "entry").Elements(xmlns + "media:group")
select new YTFeeds
{
Title = entry.Element(xmlns + "media:title").Value,
Description = entry.Element(xmlns + "media:description").Value,
Video = entry.Elements(xmlns + "media:player").ElementAt(1).Attribute("url").Value,
Image = entry.Elements(xmlns + "media:thumbnail").ElementAt(1).Attribute("url").Value
}).ToList());
Я получаю ошибку, которая говорит invalid character or hexcode ":"
, Я хочу получить элементы из тега: <media:group>
Пожалуйста, предложите.
1 ответ
Решение
При записи имени элемента с использованием пространства имен вы должны пропустить префикс, он будет обработан для вас. И в этом случае вам нужен отдельный экземпляр пространства имен, чтобы иметь возможность получить media
элементы. Таким образом, доступ к заголовку, описанию и т. Д. Должен быть таким:
var doc = XDocument.Load(Server.MapPath(@"XMLFile.xml"));
XNamespace xmlns = "http://www.w3.org/2005/Atom";
XNamespace media = "http://search.yahoo.com/mrss/";
var query =
from entry in doc.Root.Elements(xmlns + "entry")
let grp = entry.Element(media + "group")
select new YTFeeds
{
Title = (string)grp.Element(media + "title"),
Description = (string)grp.Element(media + "description"),
Video = (string)grp.Element(media + "player").Attribute("url"),
Image = grp.Elements(media + "thumbnail")
.Select(e => (string)e.Attribute("url"))
.First(),
};
var lstYT = query.ToList();