4

YouTubeチャンネルのAtomフィードを解析したい。これがその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> 提案してください。

4

1 に答える 1

4

名前空間を使用して要素の名前を書き出すときは、接頭辞を省略する必要があります。接頭辞は処理されます。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();
于 2012-07-01T17:56:21.673 に答える