首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程MusicBrainz Web服务

进程MusicBrainz Web服务
EN

Stack Overflow用户
提问于 2015-01-26 18:02:55
回答 3查看 452关注 0票数 0

我知道MusicBrainz有一个版本2可用,但v1是我实现这一目标的唯一途径。(这是1返回,通常是数百.):XML:

代码语言:javascript
复制
<metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#" xmlns:ext="http://musicbrainz.org/ns/ext-1.0#">
   <release-list count="928" offset="0">
      <release id="bea5602c-53bc-4416-af49-238aae51e8ea" type="Live Bootleg" ext:score="100">
         <title>Seattle 1988</title>
         <text-representation language="ENG" script="Latn" />
         <artist id="5b11f4ce-a62d-471e-81fc-a69a8278c7da">
            <name>Nirvana</name>
            <sort-name>Nirvana</sort-name>
         </artist>
         <release-event-list>
            <event format="CD" />
         </release-event-list>
         <disc-list count="0" />
         <track-list count="10" />
      </release>
   </release-list>
</metadata>

我能够得到所有的专辑与此:

代码语言:javascript
复制
client = new WebClient();
        client.OpenReadCompleted += client_OpenReadCompleted;
        // Call public web service.
        string requestUri =
        "http://musicbrainz.org/ws/1/release/?limit=100&type=xml&artist={0}";
        client.OpenReadAsync(
          new Uri(String.Format(
          requestUri, "Jimi Hendrix")));

 private void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
          // Process returned data.
        XElement results;
        albums = new List<string>();

        if (e.Error != null)
        { return; }
        else
        {
            XNamespace ns =
            @"http://musicbrainz.org/ns/mmd-1.0#";
            results = XElement.Load(e.Result);

            var q = from r in results.Descendants(ns + "release")
                    select new { Title = r.Element(ns + "title").Value };

            foreach (var i in q)
            {
                albums.Add(i.Title);
                Console.WriteLine(i.Title);
            }
        }

我怎样才能得到每个专辑的发行id?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-26 18:15:41

由于您已经选择了发布节点,您只需要获得id-attribute:

代码语言:javascript
复制
var q = from r in results.Descendants(ns + "release")
        select new 
        { 
            Title = r.Element(ns + "title").Value, 
            Release = r.Attribute("id").Value 
        };
票数 0
EN

Stack Overflow用户

发布于 2015-01-26 18:23:22

在这里,您可以用来存储数据的类。

代码语言:javascript
复制
class Release 
{
    public Guid Id {get; set;}
    public string Title {get; set;}
}

这是从响应中检索Release集合的方法。

代码语言:javascript
复制
XNamespace ns = "http://musicbrainz.org/ns/mmd-1.0#";
var doc = XElement.Load(e.Result);

IEnumerable<Release> res = doc.Descendants(ns + "release")
      .Select(r => new Release{
                                 Id = (Guid)r.Attribute("id"),
                                 Title = (string)r.Element(ns + "title")
                              });
票数 0
EN

Stack Overflow用户

发布于 2015-01-26 18:23:23

代码语言:javascript
复制
var q = from r in results.Descendants(ns + "release")
    select new 
    { 
        Title = r.Element(ns + "title").Value, 
        Release = r.Attribute("id").Value 
    };

效果很好!谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28155970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档